Java 定義了 4 種整數類型:byte、short、int 和 long。
所有這些類型都是有符號的、正的或負的整數。
Java 不支持無符號的、只是正值的整數。許多其他計算機語言同時支持有符號和無符號整數。然而,Java 的設計者覺得無符號整數不是必需的。
在 Java 中,用于存儲字符的數據類型是 char。然而,C/C++程序員要當心:
Java 中的 char與 C 或 C++中的 char 是不同的。在 C/C++中,char 的寬度是 8 位。而在 Java 中不是這樣的。
相反,Java 使用 Unicode 表示字符。為此,Unicode 需要 16 位寬。因此,在 Java 中 char 是 16 位類型。
從 JDK 7 開始,可以使用二進制指定整型字面值。為此,使用 0b 或 0B 作為數值的前綴。
從 JDK 7 開始,在整型字面值中還可以嵌入一個或多個下劃線。嵌入下劃線可以使閱讀很大的整數變得更加容易。當編譯字面值時,會丟棄下劃線。
int x = 123___456___789;
int x = 0b1101_0101_0001_1010;
Java 中的字符被索引到 Unicode 字符集,它們是可以轉換成整數的 16 位值,并且可以使用整數運算符進行操作,例如加和減運算符。字符型字面值使用位于一對單引號中的字符來表示。
所有可見的 ASCII 字符都可以直接輸入到單引號中,如'a'、'z'以及'@'。對于那些不能直接輸入的字符,可以使用轉義字符序列輸入需要的字符,
例如'\"表示單引號、'\n'表示換行符。還有一種以八進制或十六進制直接輸入字符值的機制。對于八進制表示法,使用反斜杠后跟三位數字表示,
例如'\141'是字母'a'。對于十六進制,先輸入“\u”,然后是 4 位的十六進制數。
例如'\u0061'表示 ISO-Latin-1 字符'a',因為第一個字節為 0;'\u73b0'是 '現'
char c = '\u73b0'; //現
無符號右移運算符
int i=-8>>>1;
Java不用goto語句,而是用try-catch-finally異常處理語句來代替goto語句處理出錯的功能.
Java不支持宏定義,而是使用關鍵字final來定義常量,在C++中則采用宏定義來實現常量定義,這不得于程序的可讀性.
結構和聯合的處理.在C和C++中,結構和聯合的所有成員均為公有,這就帶來了安全性問題,而在Java中根本就不包含結構和聯合,所有的內容都封裝在類里面
Java不再使用指針.程序員不能直接進行任何指針操作.
java沒有象C++一樣的操作符重載機制
java不管構造函數有無參數,都應該寫括號
java初始化成員變量的方法和C++有很大不同. java允許直接在類內部指定成員變量初始值
java成員變量的初始化順序取決于成員變量的聲明順序, 而成員變量的初始化總是早于構造函數的執行.這也和C++有很大不同,C++的成員變量初始化順序也取決于成員變量的聲明順序,但是,它們只能在構造函數體內,或者在構造函數的初始化列表里進行初始化,而不會先于構造函數
Java程序中所有的對象都是用new操作符建立在內存堆棧上
Java提供了自動化的垃圾搜集(可以手動觸發)。沒有析構函式的概念,對 finalize() 的使用是不推薦的
Java沒有函式指標機制。替代的概念是接口,Adapter 和 Listener也是被廣泛使用的
Java的繼承是面向對象程序設計的關鍵。在Java中,通過關鍵字extends繼承一個已有的類,被繼承的類稱為父類(超類,基類),新的類稱為子類(派生類)。在Java中不允許多繼承。
Java中,this通常指當前對象,super則指父類的。
Java里面有一個金科玉律:任何public非static函數的調用都是多態的。 所以,super.method()必然調用的是子類的那個版本