1.構造器
寫一個java類,首先要先從構造器開始,構造器與類同名,在構造類的對象時會先從構造器開始。
構造器總是伴随着new操作符的執行而被調用。
構造器主要是用來初始化類的執行個體域。
構造器的特點:
構造器與類同名。
每個類可以有1個或多個構造器。
構造器可以有0個或多個參數。
構造器沒有傳回值。
構造器總是伴随着new操作一起調用。
如果在類中定義了一個final執行個體域,就意味着這個執行個體域隻能被初始化一次,那麼它必須在構造器中給予初始化。
如果在多個構造器中都需要給類的一個執行個體域初始化成同一個數值,往往會在執行個體域處直接初始化。比如: private double salary = 100.0;
構造器this方法:構造器可以有多個,如果在一個構造器中調用另一個構造器,要用this(...)方法。比如:
public class Abc
{
private double salary;
public Abc(){
this(100.0);
}
public Abc(double aSalary){
salary = aSalary;
}
}
如果類中沒有寫構造方法,那麼java會提供一個隐含的預設的構造器,預設将類的執行個體域初始化為0、false或者null。如果在類中寫了一個含參數的構造方法,就必須在類中同時也寫一個不含參數的構造方法,否則java會提示出錯。
構造器是為了給類的執行個體域初始化,其實給執行個體域初始化還有其他的方法,比如在類中寫一個靜态塊或者初始化塊(也叫非靜态塊),有人認為非靜态塊是指構造函數,其實這是種錯誤的認識。
靜态塊是這樣寫的:static{...},在一個類中隻能有一個靜态塊,隻能有一個公有類。它會在對象裝載到系統的時候執行一次,然後銷毀,它可以初始化靜态變量。
初始化塊是這樣的:{...},在一個類中可以有多個初始化塊。它在每次構造對象的時候執行一次,它可以初始化執行個體域。
如果你要搞清楚靜态塊和初始化塊的執行順序,請搞清楚以下内容邏輯(來自網絡):
父類和子類中都要靜态代碼塊,非靜态代碼塊,構造方法時。
初始化子類對象時,調用的順序是
調用順序:父類靜态,子類靜态,父類非靜态,父類構造,子類非靜态,子類構造
2.顯式參數和隐式參數
顯式參數,就是平時見到的在方法名括号中間的參數,就是所謂能看得見的參數。 隐式參數,是在類的方法中調用了類的執行個體域。這個被調用的執行個體域就是隐式參數。在以下的這個類中調用了a.ariseSalary(100),就用到了隐式參數。比如:
public class Abc
{
private double salary;
public Abc(){
}
public void ariseSalary(double em){
double employ = salary * em;
salary += employ;
}
}
Abc a = new Abc();
a.ariseSalary(100);
在上面的類中,如果調用了這個方法salary是執行個體域,ariseSalary方法中的salary就是隐式參數。如果在隐式參數的前面加上this,隐式參數就更清晰:
public void ariseSalary(double em){
double employ = this.salary * em;
this.salary += employ;
}
推薦在隐式參數的前面加上this操作符。this操作符代表的是本類。