《Java開發實戰經典》筆記
1.引用資料型別(class, array等),其實就是分棧記憶體和堆記憶體的資料型別,在棧記憶體中儲存物件, 在堆記憶體中存具體值。
因為陣列是引用資料型別,所以陣列變數儲存的並非是陣列的實體,而是陣列堆記憶體的地址。
2.對於引用資料型別,比如陣列傳遞進方法中後,如果方法對陣列本身做出了修改,修改結果也將儲存下來,即使方法沒有返回值,修改的結果也將儲存。(這也能夠理解為什麼用setter 設定物件屬性後getter就能輸出修改的內容)
3.被封裝的屬性或方法只能在其類的內部被呼叫,而不能在類的外部呼叫。
4.setter的作用是為屬性賦值,賦值之後這個屬性值就改變了,在主方法中用getter的話得到的值就是修改的值。
5.new Person("Oscar", 30).tell(); 這個是匿名物件的方法使用格式!
6.使用new關鍵字的話,不管怎麼樣都會開闢新的堆記憶體空間,而String str="Hello"的形式可能情況會不同。
7.一定記住字串的內容一旦宣告不可改變
一個String物件的內容的改變實際上是通過記憶體地址的斷開和連線完成的,而字串本身的內容沒有任何改變,即雖然你沒有用new關鍵字,但程式自動開闢了一個新的堆記憶體。
8.引用傳遞是指將堆記憶體空間的使用權交給多個棧記憶體。
9.
將傳遞引數的name值賦給name中的name屬性,即把從構造方法中傳遞進去的引數值付給屬性,這是this的一個用法:在賦值時明確地指出屬性
10.
用this呼叫構造方法優點是可以重複執行this指定的構造方法,很方便,但要注意使用this呼叫構造方法時必須,也只能放在構造方法的第一行,並且還要留一個出口,也就是說程式中至少存在一個沒有包含用this呼叫構造方法的構造方法。(一般都將無參構造作為出口)
11.物件比較操作是java中比較核心的操作,
步驟:(1)判斷物件地址是否相等;
(2) 分別判斷物件屬性是否相等;用 if(p1.compare(p2)) 來判斷
p1.name和p1.getName都可以訪問或取得物件
12.使用類名訪問static屬性:
Person.country="B city";
13.String args[]表示的是執行時的引數,引數傳遞的形式為“Java 類名稱 引數1 引數2 引數3”。所有的輸入引數都儲存在args陣列之中。
14.構造塊(直接寫在類中的程式碼塊);
構造方法;
主方法;
15.
16.使用內部類可以方便的訪問外部類中的私有屬性。使用static定義內部類就可以直接訪問內部類中的屬性
總結:
你不能在主方法類裡直接呼叫內部類Inner,在外部類中可以呼叫內部類,在主方法中只能呼叫外部類,或者通過外部類呼叫內部類(即經過static宣告的內部類)。
總結:內部類Inner裡面有print()方法,
並且內部類存在於外部類Outer的fun()方法之中,
fun()方法還在Outer外部類中被呼叫了。
所以在主方法中用new Outer().fun()來進行賦值,呼叫方法的操作。