3.1dom
本節做者爲了簡化System.out.println操做,引入了本身寫的一個Print類,裏面的靜態方法print()內部就是調用了System.out.println()。函數
在使用Print類時運用了靜態import。這個1.5添加的新特性,它import具體的類,這樣在代碼中可使用該類的靜態方法,也能夠import類的靜態方法,導入單一的靜態方法。例如要使用com.test.Print類的靜態方法能夠:spa
import static com.test.Print.*;.net
注意必定要帶*,表明靜態導入Print類下的全部靜態方法,這樣在代碼中能夠直接使用方法名調用方法而不用加類名,要導入一個靜態方法就把*替換成方法名便可。對象
3.5字符串
整數之間除法的結果會直接去掉小數位而不是四捨五入的結果。get
本小節的示例程序中使用了Random類的對象,若是構造函數無參數,則會使用當前時間做爲隨機數生成器的種子。若是在構造函數的參數中指定固定的種子,那麼產生的隨機數序列老是相同的。編譯器
一元加號的存在是爲了與一元減號相對應,它惟一的做用是將較小類型的操做數提高爲int。it
3.6編譯
自增運算符和自減運算符分爲前綴式和後綴式兩種,前綴式是++或--在變量或表達式前。前綴式是先執行運算再生成值,然後綴式則先生成值再執行運算。
3.8
與、或、非操做只可應用於布爾值,與C++不一樣,C++認爲非零爲true,而Java只能使用布爾類型。
短路:一旦可以明確無誤的肯定整個表達式的值,就再也不計算表達式的餘下部分了。
3.9
C、C++或者Java中,二進制數沒有直接常量表示方法。Java中,使用Integer和Long類的靜態方法toBinaryString()能夠輸出二進制表示的字符串。
若是給變量賦值,字面常量超出了變量的範圍,編譯器會報錯。
用小數字面常量給float賦值,編譯器一般會將其做爲雙精度處理,因此若是沒有尾隨f,會報錯。
Java的指數字面常量中e或者E表明10的冪次。
3.10
按位與、按位或、按位異或也能夠用於布爾類型,可是判斷表達式時不能短路,按位非不能夠用於布爾類型。
練習10中要求構造兩個int,有交替的二進制位1和0,一個以1結尾一個以0結尾。提示中寫到用十六進制是最簡單的表示方法,由於十六進制一個數正好表明四個位。
3.11
<< 左移操做符,左移位後補零;
>>有符號右移操做符,右移後若符號爲正,則在高位插入0,若爲負則插入1。
還有一種無符號右移操做符>>>不管正負都插入0
char、byte或short移位前會被轉換成int,且獲得的結果也是int。long移位後獲得的結果是long。
第二段有這麼一段話「對char,byte或者short進行移位處理,那麼在移位進行以前,它們會自動轉換成一個int。只有右側的5個低位纔會有用。這樣可防止咱們在一個int數裏移動不切實際的位數。若對一個long值進行處理,最後獲得的結果也是long。此時只會用到右側的6個低位,防止移動超過long值裏現成的位數。」 不理解,感謝@阿信sxq的解答,把答案也放在這裏供你們參考:
對上面那段話的理解是:移位操做符操做的運算對象是二進制的「位」,int類型是32位也就是2的5次冪 !若是移32位以上,那麼原來的數的信息會所有丟失,這樣也就沒有什麼意義了!因此上面的「只有右側的5個低位纔會有用」說的是:移位操做符右端的那個數(化成二進制)的低5位纔有用,即
X < <y;
是指y的低5位纔有用,即不能大於32。 而對於long型也是一樣的道理!
所以,若是對一個int 型,進行移位,X < <y; 當y小於32時,移位後的結果通常都在咱們的預料當中;而若是y大於32時,因爲移位超出了int所能表示的範圍,這時就先把y化成二進制數,而後取該二進制數右端的低5位,再把這5位化成十進制,此時的這個十進制就是要對X移動的位數。
例如: int int a=140;
a << 34
System.out.println(Integer.toBinaryString(a << b));
上面那兩個語句的執行過程是:先把a化成二進制數:10001100
執行語句 a << 34 對a左移32位時,先把 34化成二進制:100010,對該二進制數取右邊5位,即00010,化成十進制數爲2,因此其實是對a左移兩位。如今,地球人都會知道上面程序的輸出結果是:1000110000
在使用>>>=應注意,若是對byte或short值進行移位,它們會先被轉換成int,再進行右移操做,而後被階段賦值給原來的類型,這可能會獲得-1的結果。
練習13中要對char類型以二進制形式展現,調用Integer.toBinaryString()方法將char類型做爲參數傳入便可。而若是在System.out.println方法直接傳入char打印出的是字符,將char轉換爲int打印出數值。
3.15
Java容許把任何基本數據類型轉換成其餘基本數據類型,除布爾型外。類數據類型不容許轉換,除非類族之間的轉換。
類型提高,對基本類型執行算術操做和按位操做,只要類型比int小,那麼運算以前這些值會自動轉換成int。
因此要將結果賦值給原類型須要顯示類型轉換,而+=這樣的複合操做符不須要這樣的轉換,它能夠自動轉換。