Java之旅 (6) 初始化和清理
用建構函式保證初始化,JAVA的物件建立和初始化是同一個概念,你不能要這個而不要那個。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
方法的過載區分經過載的方法:唯一的引數型別的列表
建構函式:如果沒有建構函式,編譯器會幫你建立一個無參型別的建構函式,但是如果你構造了一個,那麼
不管你構造的是個啥樣的,編譯器都不會再幫你構造了。
this的用法:this只應用於那些,你明確指明要使用當前物件的reference的特殊情況。舉例來說,他常用於
return語句以返回當前物件的reference.
/////////////////////////////////////
publicclass 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();
成員的初始化:基本資料型別,如果是在方法內部定義的區域性變數,則不初始化會出錯,而如果是類的資料
成員,則不初始化,編譯器會自動負初值。
下面是對基本建立物件做的一個總結,就用dog為例吧:
1,第一次建立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,今天到這裡,明天將學習到的是“隱藏實現”和“複用類”