JAVA每日一旅2

葉思維發表於2016-10-20

1.關於型別轉換

兩個數值進行二元操作時,會有如下的轉換操作:
如果兩個運算元其中有一個是double型別,另一個操作就會轉換為double型別。
否則,如果其中一個運算元是float型別,另一個將會轉換為float型別。
否則,如果其中一個運算元是long型別,另一個會轉換為long型別。
否則,兩個運算元都轉換為int型別。
2.關於重寫和過載
過載(overload):只要方法名一致,其他(引數列表、返回值)隨意。
重寫(overriding):只有實現的功能程式碼不一致 ,其他的(函式名、引數列表、返回值型別)必須都一致。
方法的重寫(override)兩同兩小一大原則
方法名相同,引數型別相同
子類返回型別小於等於父類方法返回型別,
子類丟擲異常小於等於父類方法丟擲異常,
子類訪問許可權大於等於父類方法訪問許可權。
 
3.string類和stringbuffer類
 StringBuffer類呼叫toString()方法後將轉換為String型別。
 String型別中沒有append()方法。
 可以直接將字串複製給宣告的Stirng類的變數,而StringBuffer類的不行。
string類不可改變,但可以共享,stringbuffer類可以改變。
4.toUpperCase()
toUpperCase()會對當前物件進行檢查 如果不需要轉換直接返回當前物件,否則new一個新物件返回。
5.關於JVM堆記憶體溢位
簡單的來說 java的堆記憶體分為兩塊:permantspace(持久帶) 和 heap space。
持久帶中主要存放用於存放靜態型別資料,如 Java Class, Method 等, 與垃圾收集器要收集的Java物件關係不大。
而heapspace分為年輕帶和年老帶 
年輕代的垃圾回收叫 Young GC, 年老代的垃圾回收叫 Full GC。
在年輕代中經歷了N次(可配置)垃圾回收後仍然存活的物件,就會被複制到年老代中。因此,可以認為年老代中存放的都是一些生命週期較長的物件。
年老代溢位原因有迴圈上萬次的字串處理、建立上千萬個物件、在一段程式碼內申請上百M甚至上G的記憶體。
持久代溢位原因是動態載入了大量Java類而導致溢位。
 
 

相關文章