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