《java核心技術》
花了半天到一天又認真讀了一下java核心技術中的類部分,感覺最近編程時候好多迷迷糊糊,“這樣對不對呢,試一試。怎么不對呢”這類的迷糊問題原來都早有定義。
-
main函數(shù)必須在主類中
-
一個class就是一個機器,要使用其中的方法,需要構建這個類的實例。 一個class中如果定義構造器,構造器的類型是public 類名,類名就是原類名
-
一個類可以有多個構造器,構造器沒有返回值。
-
變量標記為private,代表只有該類的方法才能使用這些變量,別的類的不可以 方法標記為public,則別的類的方法都可以調(diào)用這個方法
-
訪問器方法:getname 更改器方法:setname 一般是:私有的數(shù)據(jù)域,共有的訪問器方法和更改器方法 、
-
靜態(tài)方法:private static的方法,不需要構建實例就可以直接飲用
a,如果該方法不需要用對象的變量,只需要使用顯式參數(shù)就可以
b,如果這個方法只需要訪問類的靜態(tài)域。
- 靜態(tài)域:屬于類的一個變量,private static int nextId,當將類做實例化后,會有多個對象,但是只有一個靜態(tài)域。
- 一個類中只能含有一個公有類,且名字和文件名一致。EmployTest.java中含有main方法,Employ.java中定義了Employ 的class,則編譯時候javac Employ*.java ,在java EmployTest,它會自動將Employ.java也生成class,再串聯(lián)執(zhí)
- .每個類都可以有個main,用來測試這個類,做單元測試
- this可以調(diào)用隱式參數(shù)。如果沒有寫構造器,會有個默認構造器,將數(shù)值設置為0,將對象設置為null(注意:String類的name也會成為null,因為String是個類)
對象與類基礎
對象變量:Java的對象變量相當于C++的對象指針
構造體:1. 必須與類同名
2.每個類至少有一個構造體,默認為無參構造體
3.可以有0個或多個參數(shù)
4.沒有返回值
5.可以是private,protected或public,默認為public
6.總是伴隨new關鍵字一同被使用
顯式參數(shù):類方法括號中的參數(shù)
隱式參數(shù):調(diào)用時出現(xiàn)在方法名前的類對象;方法定義中使用this關鍵字代表該隱式參數(shù)
基于類的訪問權限:某個類的方法可以訪問該類的任何一個實例的私有域
final實例域:將實例域定義為final,則在創(chuàng)建實例時必須初始化這樣的域;對于可變對象的變量,定義為final只表示該變量不能再引用別的對象,但當前對象的內(nèi)部數(shù)據(jù)域仍可以修改。
靜態(tài)域:將域用static關鍵字修飾,表示該類的每一個實例中都有這個域的一份拷貝;靜態(tài)域?qū)儆陬?,而不屬于任何獨立的實例,每次對其進行修改,則每個實例中的該域都會變成最新的值
常量:static + final
靜態(tài)方法:將類方法用static修飾,表示該方法不能向該類的實例實施操作;靜態(tài)方法沒有隱式參數(shù)(this);靜態(tài)方法只能訪問該類中的靜態(tài)域,不能訪問實例域;靜態(tài)方法通過類名直接調(diào)用,如Math.random();
方法參數(shù)
Java使用值調(diào)用
方法參數(shù)有兩個類型:
1. 基本數(shù)據(jù)類型
2. 對象引用
對于基本數(shù)據(jù)類型參數(shù),方法并不能修改實參(因為值調(diào)用)
對于對象引用的參數(shù),形參與實參指向的是同一個對象位置,所以方法能改變該對象內(nèi)部的值,但不能使實參指向一個新的對象
對象構造
重載:一個方法的簽名包括方法名及其參數(shù)列表,不包括返回值和訪問權限;重載就是具有相同方法名、不同參數(shù)列表的一組方法,由編譯器根據(jù)參數(shù)列表挑選匹配的方法進行調(diào)用
默認域初始化:如果沒有在構造體中對域進行顯式賦值,那么默認地,數(shù)值域賦為0,布爾域賦為false,對象變量賦為null
默認構造體:如果在類定義中沒有顯式定義構造體,那么默認地,運行時系統(tǒng)會提供一個無參的空構造體
顯式域初始化:類定義中,在域定義時直接將初始值賦給該域
調(diào)用另一個構造體:在一個構造體中第一句使用this(…);可以調(diào)用另一個重載的構造體
初始化塊:類定義中直接包含代碼塊,用于給域賦上初始值
對象構造執(zhí)行順序:包含靜態(tài)塊、域初始化語句、初始化塊、多個構造體
1. 所有數(shù)據(jù)域都被初始化為0、false或null
2. 按照類聲明中出現(xiàn)的次序依次執(zhí)行所有靜態(tài)塊
3. 按照類聲明中出現(xiàn)的次序依次執(zhí)行所有域初始化語句和初始化塊
4. 如果構造體第一行調(diào)用了第二個構造體,先執(zhí)行第二個構造體的主體
5. 執(zhí)行本構造體的主體
對象析構:Java不支持對象析構,由垃圾回收器統(tǒng)一回收不再被需要的資源