用建構函式保證初始化,JAVA的對象建立和初始化是同一個概念,你不能要這個而不要那個。
方法的重載 區分經重載的方法:唯一的參數類型的列表
建構函式:如果沒有建構函式,編譯器會幫你建立一個無參類型的建構函式,但是如果你構造了一個,那麼
不管你構造的是個啥樣的,編譯器都不會再幫你構造了。
this的用法:this只應用於那些,你明確指明要使用當前對象的reference的特殊情況。舉例來說,他常用於
return語句以返回當前對象的reference.
/////////////////////////////////////
public class TestThis
{
int i = 0;
TestThis increment()
{
i++;
return this;
}
void print()
{
System.out.println("i="+i);
}
public static void main(String[] args)
{
TestThis x = new TestThis();
x.increment.increment.increment.print(); //i==3
}
}
/////////////////////////////////////////
編譯器不會讓你在方法裡調用建構函式,但可以在建構函式裡調用建構函式。這個時候可以使用this
來進行這種調用。
參數的名字和類的資料成員的名字相同(有時候是刻意如此),可以利用this.x來表示他是
資料成員,而非參數。
static 的用法:是不是真正的“OOP”,留給理論家吧。
記憶體回收和finalize()都是靠不住的。而且用他們的地方和時機都是個問題。不要太在意。有一點要知道
System.gc()可以強制的執行finalize();
成員的初始化:基礎資料型別 (Elementary Data Type),如果是在方法內部定義的局部變數,則不初始化會出錯,而如果是類的資料
成員,則不初始化,編譯器會自動負初值。
下面是對基本建立對象做的一個總結,就用dog為例吧:
1,第一次建立dog類的對象(建構函式實際上是個static方法),或者第一次訪問Dog類的static的方法或
欄位的時候,java解譯器會要搜尋classpath,找到Dog.class。
2,裝載了Dog.class後,會對所有的static資料進行初始化。這樣第一個裝載class對象的時候,會先進行
static成員的初始化。
3,用new()建立新對象時,Dog對象的建立進程會先在堆裡為對象分配足夠的記憶體。
4,這快記憶體先被清零,這樣就自動的把Dog對象的primitive類型的成員賦上預設的值(對於數字就是零,或者相應的boolean和char),將reference設為null。
5,執行定義成員資料時所作的初始化。
6,執行建構函式。
ok,今天到這裡,明天將學習到的是“隱藏實現”和“複用類”