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