標籤:
1、Java中記憶體的基本結構:
棧(stack):存放局部變數、對象的引用;
堆(heap):new出來的東西(對象)
方法區:常量池等
靜態域:全域變數等
變數在其生命週期結束後將出棧,此時堆中的空間因為沒有棧中的變數來引用它將被系統回收
2、Java中關於變數的類型:1)按照資料類型的不同:基礎資料型別 (Elementary Data Type) & 引用資料類型
2)按照聲明位置的不同:成員變數 & 局部變數
3、成員變數與局部變數的區別:
--聲明位置不同;
--成員變數的修飾符:public、private、protected、預設
局部變數沒有修飾符(與所在方法修飾符相同);
--局部變數必須要初始化後才能使用(無預設值)
成員變數若不初始化,則根據變數類型賦預設值;
--局部變數在記憶體中存在於棧空間中
成員變數存在於堆空間內(成員變數所在類的引用則存在於棧空間);
4、可變個數的形參
--舉例:
1 public void print(String ... args){2 for(int i = 0; i < args.length; i++){3 System.out.println(args[i]);4 }5 }
註:若方法中存在可變個數的形參,則必須將其聲明在所有參數的最後;也就是說一個方法只能聲明一個可變個數的形參。
個人理解:這個可變個數的參數與數組使用一致,因此在調用方法的時候也可以直接傳入一個數組。
5、參數傳遞的機制:Java中的參數傳遞均為值傳遞。
個人理解:不管傳遞是的基礎資料型別 (Elementary Data Type)還是引用資料類型,調用方法時均將實參的值傳遞給形參,而不是將實參直接傳遞到方法中。
6、修飾類的的修飾符只有public或者預設。
7、關於this關鍵字:注意1)this()必須寫在構造器第一行;2)至少又一個構造器不使用this();
8、JavaBean:1)類型是公用的
2)有一個無參的公用的構造器
3)有屬性,且有對應的get、set方法。
9、package:聲明源檔案所在包,寫在程式的第一行。
10、import static ...:匯入制定類的static的屬性或方法。
11、Java只支援單繼承。
12、多態性的前提:1)存在繼承關係;2)子類中必須有對父類方法的重寫。
個人理解:執行個體化父類的對象時,若new出來的是其子類,則只能調用子類中重寫的方法而不能調用子類中其他方法。
13、對象a instanceof 類A 判斷對象a是否是類A的一個執行個體,若是返回true,反之返回false。
註:若果為true,則對象a一定是A類的父類的執行個體。
14、子類對象的多態性不適用於屬性,不適用於方法。
15、對於每一個基礎資料型別 (Elementary Data Type),都有一個與其對應的封裝類,由於在JDK5.0之後添加了裝箱拆箱的特性,所以無需再通過封裝類的各種方法來實現與基礎資料型別 (Elementary Data Type)的轉換。
當讓也可以使用方法來轉換(如Integer integer = new Integer(5)、int i = integer.intValue().)。
16、static可以用來修飾屬性、方法、代碼塊(或初始化塊)、內部類。
17、static修飾的屬性成為類變數,它不依賴於對象而存在,隨著類的載入而載入(靜態方法也如此)。與之對應的是執行個體變數,它只有在對象被建立之後才存在。
18、在靜態方法內能夠使用本類靜態屬性或方法,但不能調用非靜態屬性或方法。反之,非靜態屬性或方法可以調用靜態屬性或方法。
個人理解:靜態屬性或方法在類被載入時就被建立,而非靜態屬性或方法只有在類執行個體化對象後才被建立。而且靜態屬性或方法的生命週期也比非靜態長。
19、類的五個成員:屬性,方法,構造器,代碼塊,內部類。
20、關於屬性賦值的操作:1)預設初始化;2)顯示初始化或代碼塊初始化(按順序執行);3)構造器賦值;4)方法賦值。
21、final標記的類不能被繼承;fianl標記的方法不能被子類重寫;final標記的屬性只能被初始化一次,此屬性為一個常量,通常用大寫字母命名。
常量不能使用預設初始化,可以顯示的賦值,或在代碼塊、構造器中賦值。static final修飾的變數為全域常量。
22、抽象類別:1)不能被執行個體化;2)有構造器,可供子類使用。3)抽象方法所在的類一定是抽象類別。
一個類若繼承於抽象類別,則必須重寫抽象類別中的抽象方法。
23、通過多態性來建立的抽象類別執行個體只能調用子類重寫過的方法。
24、介面是抽象方法和常量值的定義的集合;介面是一種特俗的抽象類別,只包含常量和方法的定義,而沒有變數和方法的實現。
--一個類可以實現多個介面(因為Java是單繼承的,所以介面可以實現多重繼承的效果)。
--介面定義的是一種功能,此功能可以被所有類實現。
--介面沒有構造器,所以不能執行個體化介面。
--介面可以繼承其他介面,而且可以實現多繼承。
25、介面與具體的實作類別也存在多態性。
26、介面可以實現匿名類對象。例:OnClickListener ocl = new OnClickListener(){
void onClick(View v){}
};
27、介面總結:1)通過介面可以實現不相關類的相同行為,而不需要考慮這些類之間的層次關係;
2)通過介面可以指明多個類需要實現的方法,一般用於定義對象的擴張功能;
3)介面主要用來定義規範。接觸耦合關係。
28、內部類:
--分類:1)成員內部類(方法外);2)局部內部類(方法裡)。
--內部類是外部類的一個成員,有修飾符(4個),可以用static final修飾,可以使用外部類的屬性和方法。
--非靜態類的內部類的執行個體化:先執行個體化一個外部類對象,再通過該對象調用內部類的構造器來執行個體化內部類。
Java筆記--基礎