1. Two methods of reusing classes
1.1 Composition
1.2 Inheritance
2. Initializing the base class
In the constructor, call "super(agument list)" first, or the compiler will call default constructor of the base class.
3. Cleanup
3.1 Commonly, there is no need to do this.
3.2 If you really want to do something cleanup, use "try { } finally { }".
3.3 First, "this.cleanup()", then "super.cleanup()".
4. Composition vs. Inheritance
Composition: has-a relation
Inheritance: is-a relation
5. Upcasting
If a function is definded as "func(ObjectA aaa)",you can use "func(bbb)" when "bbb" is ObjectB which extends ObjectA.
At this time, "bbb" is upcasted to a ObjectA.
6. "Final"
6.1 Final Data
6.1.1 It is a compile-time constant that won't ever change.
public static final int i = 10;
6.2.2 It is a value initialized at run time that you don’t want changed
public static final Radom rd = new Radom(20); // rd is initialized when the class is loaded, and can't be changed any more.
public final int[] a = {1,2,3,4,5}; // a can't be changed, but a[i] can be changed.
6.3 Blank finals
Blank finals MUST be initialized in constructor.
Blank final field can be initialized by different values for two or more objects.
6.4 Final arguments
Inside the method, you can't change what the argument reference points to.
6.5 Final methods
6.5.1 It enables preventing any inheriting classes from changing its meaning.(Inheriting classes can't override this method.)
6.5.2 JVM will treat final methods as INLINE methods when it is not too long.
6.5.3 A PRIVATE method in a class is implicitly FINAL.
6.6 Final classes
These classes can't be inherited.
All methods and fields in these classes are implicitly FINAL.
7. Initialization and class loading
A class is loaded when the first time you use it.
When it has a base class, the base class is then loaded.
When loading a class, the static fields and methods are initialized in textual order.(Static fields and methods in base classes are initialized first);
When creating a object, all primitives in this object are set to their default values and all the object references are set to null. Then the constructor fo base classes will be called automatically, then the constructor of the current object.