下列代碼片斷中,存在編譯錯誤的語句是()this
byte b1=1,b2=2,b3,b6,b8; final byte b4=4,b5=6,b7; b3=(b1+b2); /*語句1*/ b6=b4+b5; /*語句2*/ b8=(b1+b4); /*語句3*/ b7=(b2+b5); /*語句4*/ System.out.println(b3+b6);
1、關於final的重要知識點;
一、final關鍵字能夠用於成員變量、本地變量、方法以及類。
二、 final成員變量必須在聲明的時候初始化或者在構造器中初始化,不然就會報編譯錯誤。
三、 你不可以對final變量再次賦值。
四、 本地變量必須在聲明時賦值。
五、 在匿名類中全部變量都必須是final變量。
六、 final方法不能被重寫。
七、 final類不能被繼承。
八、 沒有在聲明時初始化final變量的稱爲空白final變量(blank final variable),它們必須在構造器中初始化,或者調用this()初始化。不這麼作的話,編譯器會報錯「final變量(變量名)須要進行初始化」。
2、數據類型轉換
當使用 +、-、*、/、%、運算操做是,遵循以下規則:
只要兩個操做數中有一個是double類型的,另外一個將會被轉換成double類型,而且結果也是double類型,若是兩個操做數中有一個是float類型的,另外一個將會被轉換爲float類型,而且結果也是float類型,若是兩個操做數中有一個是long類型的,另外一個將會被轉換成long類型,而且結果也是long類型,不然(操做數爲:byte、short、int 、char),兩個數都會被轉換成int類型,而且結果也是int類型。
語句 1 :(b1 + b2) 被轉換爲int類型 可是 b3仍爲 byte ,因此出錯 要麼將b3轉化爲int 要麼將(b1 + b2) 強制轉換爲byte類型。因此語句1錯誤。
語句 2:b4 、b5被聲明final 因此類型是不會轉換, 計算結果任然是byte ,因此 語句2正確。
語句 3:(b1 + b4) 結果仍然轉換成int 因此語句 3 錯誤。
語句 4 : (b2 + b5) 結果仍然轉換爲int , 因此語句4錯誤。code