疯狂Java讲义笔记
第1章 Java语言概述
- Windows系统中不区分大小写,Path和PATH没有区别,Linux系统区分大小写,Path不等同于PATH。
- 用户变量和环境变量的区别:用户变量只对当前用户有效,系统变量对所有用户有效。系统变量的路径排在用户变量的路径之前。
- JDK1.5以上版本无需配置CLASSPATH,CLASSPATH作用:告诉JRE在什么路径下搜索Java类,一点(.)表示在当前路径下。
- Java源文件命名规则:一个Java源文件可以包含多个类定义,但最多只能包含一个public类定义;如果Java源文件里包含public类定义,则该源文件的文件名必须与这个public类的类名相同。
第2章 理解面向对象
- 常用的UML图:用例图、类图、组件图、部署图、顺序图、活动图、状态机图。
- 用例图描述系统提供的系列功能,用例图对系统的实现不做任何说明,仅仅是是系统功能的描述。
第3章 数据类型和运算符
- Java标识符以字母、下划线(_)、美元符号($)开头,后面可以跟任意字母、数字、下划线、美元符号、日文字符等等。
- Java关键字都是小写的,TRUE、FALSE等不是Java关键字。
- 4种整型byte:占8位;short占16位;int占32位;long占64位。
- 二进制的整数以0b开头,例如int binVal=0b1001;等于int binVal=9;。
- 补码计算规则:正数的补码和原码相同,负数的补码等于反码加1。反码是对原码按位取反,最高位(符号位)不变。
- 一种随机字符串验证码生成方式:先随机生成int数字,再强制转换成char类型:int intVal=(int) (Math.random()*26+97);//随机生成97~122之间的整数。
第5章 面向对象(上)
- 类名命名规则:类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,单词与单词之间不使用任何分隔符。
- Field名命名规则:由一个或多个有意义的单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间不使用任何分隔符。
- 方法名命名规则:与Field命名规则基本相同,但建议方法名已英文中的动词开头。
- 定义类的修饰符:public、final、abstract。
- 定义Field的修饰符:public、protected、private(三选一)、static、final。
- 定义方法的修饰符:public、protected、private(三选一)、abstract、final(二选一)、可以和static组合起来。
- 在类中定义的成员,有static修饰的成员属于类本身,没有static修饰的成员属于该类的实例。
- Java里的方法不能独立存在,必须定义在类里,方法必须属于类或对象。
- 同一个类的一个方法调用另一个方法时,如果被调方法时普通方法,则默认使用this作为调用者;如果被调方法是静态方法,则默认使用类作为调用者。
- 使用static修饰的方法可以被该类或该类的任何对象来调用,但得到的执行结果都是一样的;不使用static修饰的方法被不同的对象调用会得到不同的结果。
- Java方法的参数传递方式:值传递。
- 形参个数可变的方法:在定义方法时,在最后一个形参(只能写在最后,一个方法中最多只能包含一个长度可变的形参)的类型后增加三个点(...),则表明该形参可接收多个参数值,参数值被当做数组传入。形参可变的参数实际上就是一个数组。
public class JavaClass{ public static void read(String... books){ for(String book:books){ System.out.println(book); } } public static void main(String[] args){ read("Java","C#","ASP","JSP"); } }
该代码执行结果如下:
$ java JavaClass Java C# ASP JSP
- 成员变量无需显示初始化,局部变量除了形参之外都必须显式初始化,否则不可以访问。
- 访问控制级别:
private default protected public 同一个类中 √ √ √ √ 同一个包中 √ √ √ √ 子类中 √ √ 全局范围内 √ - 通过import导入类:import package.subpackage...ClassName;导入指定包下的全部类:import package.subpackage...*;此时不能导入该目录的子目录里的类。
- Java的子类不能获得父类的构造器。
- 重载主要发生在同一个类的多个同名方法之间(有时也会出现在父类方法和子类方法之间),重写发生在子类和父类的同名方法之间。
- 构造器的重载(super和this)
- super调用的是去父类的构造器
class Base{ public double size; public String name; public Base(double size,String name){ this.size = size; this.name = name; } } class Sub extends Base{ public String color; public Sub(double size,String name,String color){ super(size,name); this.color=color; } }
- this调用的是同一个类中重载的构造器
class Apple{ public String name; public String color; public double weight; public Apple(){ //无参构造器 } public Apple(String name,String color){//两个参数的构造器 this.name = name; this.color = color; } public Apple(String name,String color,double weight){//三个参数的构造器 this(name,color); this.weight = weight; } }
- super调用的是去父类的构造器
- 初始化块是构造器的补充,在构造器之前执行,可用初始化块来对进行对象的初始化,但是初始化块不能接收任何参数。
- 初始化快的修饰符只能是static,成为静态初始化块,静态初始化块比普通初始化块先执行,用于对整个类进行初始化。
第6章 面向对象(下)
- String类的多个重载ValueOf()方法用于将基本类型变量转换成字符串,比如
String stStr = String.ValueOf(2.345f); String boolStr = String.ValueOf(true);
将字符串类型的值转换为基本类型的值可利用包装类提供的parseXxx(String s)静态方法或者Xxx(String s)构造器,比如
String intStr = "112"; int it1 = Integer.parseInt(intStr); int it2 = new Integer(intStr);
- toString()方法时Object类里的一个实例方法,所有的Java类都是Object类的子类,所有的Java对象都有toString()方法。
- 有抽象方法的类智能被定义成抽象类,抽象类里可以没有抽象方法。
- 定义抽象方法只需在普通方法上增加abstract修饰符,并把普通方法的方法体包括花括号全部去掉,并在方法后增加分号。
- abstract修饰类时表明这个类只能被继承,当abstract修饰方法时表明这个方法必须由子类提供实现(重写);而final修饰的类不能被继承,final修饰的方法不能被重写,因此abstract和final永远不可同时使用。
- abstract关键字修饰的方法必须被其子类重写才有意义,因此abstract方法不能被定义为private权限,即private和abstract不能同时修饰方法。
- 接口不能包含构造器和初始化块定义,可以包含Field(只能是常亮)、方法(只能是抽象方法)、内部类(包括内部接口、枚举)定义。
- 接口里的所有成员都是public访问权限,可以省略访问控制修饰符。
- 不管定义接口里的Field时是否使用public static final修饰符,接口里的Field总将使用这三个修饰符。
- 不管定义接口里的方法时是否使用public abstract修饰符,接口里的方法总是使用public abstract来修饰。(接口里的内部类、接口、枚举类默认采用public static修饰符)。
- 一个类实现了一个或多个接口之后,必须完全实现这些接口里所定义的全部抽象方法(重写);否则,该类将保留从父接口那里继承到的抽象方法,该类也必须定义成抽象类。
- Java不允许在外部类的静态成员中直接使用非静态内部类,比如以下代码是违法的。
-
public class Static{ private class In{} public static void main(String[] args){ new In(); } }
非静态内部类里不能有静态方法、静态Field、静态初始化块。
- 静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。
- 在外部类以外的地方创建非静态内部类实例的语法:OuterInstance.new InnerConstructor();创建静态内部类:new OuterClass.InnerConstructor();
- 对于局部成员而言,使用static修饰没有任何意义,因此所有的局部成员都不能使用static修饰。因为所有局部成员的作用域是所在方法,所以所有的局部成员都不能使用访问控制符修饰。
- 匿名内部类必须继承一个父类,或实现一个接口。但最多只能继承一个父类,或实现一个接口。
- 枚举类是一种特殊的类,它一样可以有自己的Field、方法,可以实现一个或多个接口,也可以定义自己的构造器。一个Java源文件中最多只能定义一个public访问权限的枚举类,且该Java源文件也必须与该枚举类的类名相同。
- 枚举类的构造器只能使用private访问控制符。
- 所有的枚举类都有一个values方法,返回该枚举类的所有实例。
- 垃圾回收机制只负责回收堆内存中的对象,在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法。
- 对象在内存中的三个状态:可达状态、可恢复状态、不可达状态。
- 当某个对象被其他类的类变量引用时,只有该类被销毁后,该对象才会进入可恢复状态;当被其他对象的实例变量引用时,只有当该对象被销毁后,该对象才会进入可恢复状态。
请dalao不吝赐教。