java學習筆記-String,構造器

字符串

String str = new String("java");

上面這行代碼可以用下面來表示

String str1 = "java";
Stirng str2 = new String(str2);

String 還有一個intern()方法,可以讓你把字符串放入字符串常量池中,或者是從字符串常量池中取出JVM中常量池中所維護字符串,如果調用此方法,則會使用equals方法,比較字符串池中有無相同的字符串,如果有次取回,如果沒有則放入字符串常量池中

String str1 = "java";
String str2 = new String(str);
System.out.println(str1 == str2.intern());

上述結果返回true

構造器

當實例化類時,成員就會初始化,如果沒有指定初始值,則會使用默認的初始值。整數初始值爲0,浮點數初始值爲0.0,引用初始值爲null.

在定義類時,若沒有定義構造器,則編譯器會加入一個無參的構造器,當你指定之後,編譯器就不會給你添加構造器了。

沒有參數構造器的使用,通常是爲了一些預設的情況。

如果有繼承的關係,則在建立子類實例前會先進行父類的初始流程,然後在進行子類的初始流程。所以會先執行父類的構造器,如果子類沒有指定的話,則會默認執行的是父類無參的構造器。

public class Some {
}

public class Other extends Some {
}

相等於爲:

public class Some {
    public Some() {
    }
}

public class Other extends Some {
    public Other() {
        super();
    }
}

當沒有定義構造器時,編譯器纔會幫你加上無參的構造器,可是當你自己定義構造器的時候,就需要使用super關鍵字來選擇調用父類中的構造器了。
比如:

public class Some {
    public Some() {
    }
    public Some(int a) {
    }
}

public class Other extends Some {
    public Other() {
        super(10);
    }
}

然而下面這樣寫就是錯無法通過編譯的:

public class Some {
    public Some(int a) {
    }
}

public class Other extends Some {
    public Other() {
    }
}

由於子類沒有顯示使用super,則默認調用父類的無參構造函數,可是父類中並沒有無參構造函數,所以會發生編譯時的錯誤。

發佈了47 篇原創文章 · 獲贊 8 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章