public class SprinklerSystem {
private String value1, value2, value3;
private WaterSource source = new WaterSource();
private int i;
private float f;
@Override
public String toString() {
return "SprinklerSystem{" +
"value1='" + value1 + '\'' +
", value2='" + value2 + '\'' +
", value3='" + value3 + '\'' +
", source=" + source +
", i=" + i +
", f=" + f +
'}';
}
public static void main(String[] args) {
SprinklerSystem sprinklers = new SprinklerSystem();
System.out.println(sprinklers);
}
}
class WaterSource {
private String s;
WaterSource() {
System.out.println("WaterSource()");
s = "Constructed";
}
@Override
public String toString() {
return s;
}
}
在上面兩個類定義的方法中,有一個很特殊:toString(),每一個非基本型別的物件都有一個toString()方法,而且當編譯器需要一個String而你卻只有一個物件時,該方法便會被呼叫,
所以在SprinklerSystem.toString()的運算式中:
"source = " + source;
編譯器將會得知你想要將一個String物件("soucre = ") 同WaterSource相加,由于只能將一個String物件與另一個String物件相加,因此編譯器會告訴你:" 我將呼叫toString(),把source轉換成為一個String!"這樣做之后,它就能將兩個String連接到一起并將結果傳遞給System.out.println(),每當想要使創建的類具備這樣的行為時,僅需要撰寫一個toString()方法即可,
類中域為基本型別時能夠自動被初始化為0,但是物件參考會被初始化為null,而且如果你試圖為它們呼叫任何方法,都會得到一個例外——運行時錯誤,很方便的是,在不拋出例外的情況下仍舊可以列印出一個null參考,
編譯器并不是簡單地為每一個參考都創建默認物件,這一點是很有意義的,因為若真要那樣做的話,就會在許多情況下增加不必要的負擔,如果想初始化這些參考,可以在代碼中的下列位置進行:
- 1. 在定義物件的地方,這意味著它們總是能夠在構造器被呼叫之前被初始化
- 2. 在類的構造器中
- 3. 就在正要使用這些物件之前,這種方式稱為惰性初始化,在生成物件不值得及不必每次都生成物件的情況下,這種方式可以減少額外的負擔,
- 4. 使用實體初始化,
- 以下是這四種方式的示例:
class Soap {
private String s;
Soap() {
System.out.println("Soap");
s = "Constructed";
}
@Override
public String toString() {
return s;
}
}
public class Bath {
private String s1 = "Happy", s2 = "Happy", s3 ,s4;
private Soap castille;
private int i;
private float toy;
public Bath() {
System.out.println("Inside Bath()");
s3 = "Joy";
toy = 3.14f;
castille = new Soap();
}
{i = 47;}
@Override
public String toString() {
if(s4 == null)
s4 = "joy";
return "Bath{" +
"s1='" + s1 + '\'' +
", s2='" + s2 + '\'' +
", s3='" + s3 + '\'' +
", s4='" + s4 + '\'' +
", castille=" + castille +
", i=" + i +
", toy=" + toy +
'}';
}
public static void main(String[] args) {
Bath b = new Bath();
System.out.println(b);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/464988.html
標籤:Java
上一篇:KMP演算法的實作程序
下一篇:Java面試題資料合集
