資料收集于互聯網(如有不妥,請告之)、個人心得。
1.默認的浮點類型是雙精度(double),要想要一個float必須在浮點數后面加F或者f。如:float pi = 3.14;是錯誤的
2.浮點型轉化為整型時,不進行四舍五入,直接截斷小數點后面的數.Java的類型檢查很嚴格,從低精度轉換到高精度是無須顯式轉換的,double d = 123;。但是反過來,進行窄化轉換,由高精度向低精度,或者一種類型到另一種類型,則必須使用強制類型轉化。
3.在數組聲明中包含數組長度永遠是不合法的!如:int[5] arr; 。因為,聲明的時候并沒有實例化任何對象,只有在實例化數組對象時,JVM才分配空間,這時才與長度有關。
4.對象類型的數組雖然被默認初始化了,但是并沒有調用其構造函數。也就是說:Car[] myCar = new Car[10];只創建了一個myCar數組對象!并沒有創建Car對象的任何實例!這與單純的new一個對象不同!單個的new對象時,就會調用相應的構造函數。
5.數組有length屬性,字符串有length()方法
6.String中的每個字符都是一個16位的Unicode字符,用Unicode很容易表達豐富的國際化字符集,比如很好的中文支持。char中可以保存一個中文漢字,應為char也是一個16位的Unicode字符度為0。
8.String對象是不變的!可以變化的是String對象的引用。
9.String的不變性的機制顯然會在String常量內有大量的冗余。如:"1" + "2" + "3" +......+ "n" 產生了n+(n+1)個String對象!因此Java為了更有效地使用內存,JVM留出一塊特殊的內存區域,被稱為“String常量池”。對 String多么照顧啊!當編譯器遇見String常量的時候,它檢查該池內是否已經存在相同的String常量。如果找到,就把新常量的引用指向現有的 String,不創建任何新的String常量對象。
10.java中的對象是在堆中被創建的(new),但常量類的String有點特別!像“haha”這樣的字符串根據第9條是存放在String常量池的,而String s=new String("haha");確實在堆中被創建的。
11.throw和throws關鍵字。throw用在方法體中拋出異常,后面是一個具體的異常對象。throws用在方法參數列表括號的后面,用來聲明此方法會拋出的異常種類,后面跟著一個異常類。
12.要把相應的System.out和System.err信息輸入到文件中。代碼:
try {
System.out.println("沒上");
System.setOut(new PrintStream(new FileOutputStream(new File( "c:/test.txt "))));
System.out.println( "haha ");
System.out.println("error");
} catch (Exception e) {
e.printStackTrace();
}
err的吧setOut改為setErr就可以了。
13.為一個接口提供缺省實現,便于子類有選擇從這個缺省實現進行擴展.而不必對原有接口所有方法進行實現,哪怕是空實現.
interface 窗口{
public void 關閉();
public void 移動();
public ovid 最大化();
}
//-----------------------------------------
Frame implements 窗口{//不用適配器
public void 關閉(){
System.out.println("關閉窗口");
}
public void 移動()[
}
public ovid 最大化(){
}
}
//運用適配器-------------------------------
public abstract Frame implements 窗口{
public void 關閉(){
}
public void 移動(){
}
public ovid 最大化(){
}
}
public CloseFrame extends Frame{
public void 關閉(){
System.out.println("關閉窗口");
}
}