1. 类和对象
a. 引用型变量:使用类来定义的变量。所有类都是应用数据类型。它指向实际的对象。
b. static修饰的成员不能访问没有static修饰的成员。
c. 若程序员为一个类提供了构造器,那么系统将不再为该类提供默认构造器。
d. 属性,Field,字段。static修饰的成员表明它是属于这个类共有的。
e. 引用变量存于栈内存,对象存于堆内存。对象可以有多个引用。
f. this关键字是一个对象的默认引用:1 在构造器中引用该构造器执行初始化的对象。2 在方法中引用调用该方法的对象。
g. Java中允许对象一个成员直接调用另外一个成员。
2. 方法详解
a. Java里的方法不能独立存在,所有的方法必须定义在类里。方法在逻辑上要么属于类,要么属于对象。不能独立执行方法,必须使用类或对象作为调用者。
b. Java方法里的参数传递方式是:值传递,即将实际参数值的副本传入方法内,而参数本身不会受到任何影响。
c. 如果在定义方法时,在最后一个形参的类型后增加三点(…),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。见P121
d. 方法重载的要求:同一个类中方法名相同,参数列表不同。至于方法的其他部分,如方法返回值类型,修饰符等,与方法重载没有任何关系。
3. 成员变量和局部变量
a. 与成员变量不同,局部变量除了形参外,(方法局部变量,代码块局部变量)都必须显示初始化。
b. 局部变量会覆盖成员变量。局部变量保存在其所在方法的栈内存中的。
4. 隐藏和封装
a. 封装(Encapsulation):将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
b. 访问控制符:private,protected,public
c. 高内聚,低耦合。
d. 有些方法只是用于辅助实现该类的其他方法,这些方法叫做工具方法,这些方法也可以使用private来修饰。
e. 如果使用protected来修饰一个方法,通常是希望子类来重写这个方法。
f. Java允许将一组功能相关的类放在同一个包(package)下,从而组成逻辑上的类库单元。
g. Java的包机制需要两个方面保证:1 源文件里使用package语句指定包名。2 class文件必须放在对应的路径下。
5. 深入构造器
a. 当系统开始执行构造器的执行体之前,系统已经创建了一个对象了。只是这个对象还不能被外部程序访问,只能在构造器中通过this来引用它。
b. 通过this调用另一个重载的构造器的初始化代码。
6. 类的继承(inherit)
a. extends。Java的子类不能获得父类的构造器。
b. 重写父类的方法,方法重写或方法覆盖(Override)。private方法不能被重写。
c. 方法的重写应遵循“两同两小一大”的原则,即方法名、形参列表相同,子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常应比父类方法声明抛出的异常类更小或相等,子类方法的访问权限应比父类更大或相等。
d. 可以使用super来作为调用者来调用父类被覆盖的方法。super总是指向作为该方法调用者的子类对象所对应的父类对象。
7. 多态(polymorphism)
a. Java引用变量有两个类型:一个是编译时的类型(由声明该变量时使用的类型决定),一个是运行时的类型(由实际赋给该变量的对象决定)。
b. 如果编译时类型和运行时类型不一致,就会出现所谓的多态,即相同类型的变量,执行同一方法呈现出不同的行为特征。向上转型(upcasting)
c. inatanceof运算符(引用变量 instanceof 类或接口)
8. 继承与组合
a. 不要用在父类构造器中调用被子类重写的方法。
b. 继承:is-a。组合:has-a。
9. 初始化块
a. 可以对Java对象进行初始化操作。
b. 当Java创建一个对象时,系统先为该对象的所有实例属性分配内存(前提是该类已经被加载过了),接着程序开始对这些实例属性执行初始化,其初始化顺序是:先执行初始化块或声明属性时指定的初始值,再执行构造器里指定的初始值。
c. 静态初始化块或类初始化块,系统在初始化阶段执行静态初始化块。