第四章 对象与类

1. 一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。类似c++中对象指针。
2. C++通常在类外定义方法,定义在类内会生成内联方法(编译器也会干预),JAVA所有方法都定义在类内,由编译器决定是否内联。
3. 不应该返回可变对象的引用。这样会破坏类的封装性,应该返回对象的clone()。
4. 方法可以访问该类的任何一个对象的私有域,不仅仅是本对象的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class User {

private int age;

public User(int age) {
this.age = age;
}

public int getAge() {
return age;
}
//可以不调用getAge()方法,直接通过user.age访问。
public void accessOther(User user){
System.out.println(user.age);
}

}
5. final大都用于基本类型或者不可变类。用于可变类会给人造成误解,因为本质上只是这个引用变量不可变,而他所指向的对象仍然可以改变。
6. 可以使用对象调用静态方法(类方法),对象也可以访问公有的静态变量,但是实际访问的访问的都是类的方法和变量。并不建议使用。
7. 每个类都可以有main()方法。根据运行时的主类来确定执行那个main方法。
8. JAVA参数只有值传递。对象参数传递的是引用,本质也是值传递。
9. 成员变量没有显式赋值的话,会被赋为默认值。而局部变量使用前必须初始化。
10. C++中一个构造器不能调用另一个构造器,JAVA可以。
11. 静态初始化块会在类加载的时候执行,初始化块会在构造对象的时候执行。调用构造器的基本步骤:
  1. 所有数据被初始化为默认值。
  2. 按照类声明中出现的次序依次执行所有的域初始化语句和初始化块。
  3. 执行构造器主体。如果调用其他构造器,则执行其他构造器。
12. finalize()方法会在垃圾回收器清除对象之前调用。
14. 子包和父包没有关系,使用 * 可以导入本包所有的类,但是不能导入子包中的类,两者是独立的。
15. JAVA访问修饰符。
  1. private — 只有本类中可以访问。
  2. default(默认,不写)— 本包中的类可以访问。
  3. protected — 本包中的类及其子类(包外也可以)可以访问。
  4. public — 所有的类均可访问。