Java編程思想讀書筆記(4章)
發表時間:2024-01-17 來源:明輝站整理相關軟件相關文章人氣:
[摘要]第4章 初始化和清理 一.以構造函數(constructor)確保初始化的進行 如果某個class具備構造函數,Java便會在對象生成之際,使用者有能力加以操作之前,自動調用其構造函數,于是便能名確保初始化動作一定被執行。 二.函數重載(Method overloading) ...
第4章 初始化和清理
一.以構造函數(constructor)確保初始化的進行 如果某個class具備構造函數,Java便會在對象生成之際,使用者有能力加以操作之前,自動調用其構造函數,于是便能名確保初始化動作一定被執行。
二.函數重載(Method overloading)
1. 區分重載函數
由于只能從函數名和函數的引數列來區分兩個函數,而重載函數具有相同的函數名稱,所以每個重載函數都必須具備獨一無二的引數列。
2. Default構造函數
1) default構造函數是一種不帶任何引數的構造函數。如果你所開發的class不具任何構造函數,編譯器會自動為你生成一個default構造函數。
2) 如果你自行定義了任何一個構造函數(不論有無引數),編譯器就不會為你生成default構造函數。
3) 如果定義了一個class,如
class Bush{
Bush(int I){}
}
當想用new Bush();來產生class的實例時,會產生錯誤。因為在定義class時已定義了構造函數,所以編譯器就不會為class生成default構造函數。當我們用new Bush()來產生實例時,會嘗試調用default構造函數,但在class中沒有default構造函數,所以會出錯。如:
class Sundae
{
Sundae(int i) {}
}
public class IceCream
{
public static void main(String[] args)
{
//Sundae x = new Sundae();會編譯出錯,無構造函數Sundae()
Sundae y = new Sundae(1);
}
}
*:在定義一個class時,如果定義了自己的構造函數,最好同時定義一個default構造函數
3. 關鍵字this
1) this僅用于函數之內,能取得“喚起此一函數“的那個object reference。
2) 在構造函數中,通過this可以調用同一class中別的構造函數,如
public class Flower{
Flower (int petals){}
Flower(String ss){}
Flower(int petals, Sting ss){
//petals++;調用另一個構造函數的語句必須在最起始的位置
this(petals);
//this(ss);會產生錯誤,因為在一個構造函數中只能調用一個構造函數
}
}
**:1)在構造調用另一個構造函數,調用動作必須置于最起始的位置
2)不能在構造函數以外的任何函數內調用構造函數
3)在一個構造函數內只能調用一個構造函數
4. Static的意義
無法在static函數中調用non-static函數(反向可行)。為什么不能呢,我們看下面的例子。
例4.2.4.1
假設能在static函數中調用non-static函數,那么(a)處就將出錯。因為在沒有產生Movie class實例之前,在就不存在Movie class內的name實例,而在getName()中卻要使用name實例,顯然的錯誤的。
class Movie{
String name = “”;
Movie(){}
public Movie(String name) { this.name = name; }
public static String getName() { return name; }
}
public class Test{
public static void main(String[] args){
//下面兩名先產生實例后再調用getName()沒有問題
//Movie movie1 = new Movie(“movie1”);
//String name1 = movie1.getName();
//下面一名將出錯
//String name2 = Movie.getname(); (a)
}
}