1.不要在常量和變數中出現易混淆的數字 個人感覺這條在於編程命名的規範性。代碼除了給機器看,也要給人看。要寫能夠結構清晰,命名規範,讓人看懂的代碼。 字母l作為長整型標誌時務必大寫 L 2.莫讓常量蛻變成變數 java的常量有編譯期常量和運行期常量。他們都被static final修飾。引用被sta ...
1.不要在常量和變數中出現易混淆的數字
個人感覺這條在於編程命名的規範性。代碼除了給機器看,也要給人看。要寫能夠結構清晰,命名規範,讓人看懂的代碼。
字母l作為長整型標誌時務必大寫 L
2.莫讓常量蛻變成變數
java的常量有編譯期常量和運行期常量。他們都被static final修飾。引用被static final 修飾的java八種基本類型(int,long,byte,short,float,double,char,boolean)和直接賦值的String類型的地方會被替換成實際值,例如 public static final int a = 1; 引用a的地方會被直接替換成1.基本類型的包裝類型不可以。以上幾種是編譯期常量。
運行期常量是到運行時才能確定值。例如public static final int a = Math.getExponent(32); a的值需要經過計算才能完成。當然也不是所有經過計算才能得到值的都是運行時常量。
如:public static final a = 1+1; 仍然屬於編譯期常量。
oracle官方文檔第15章28節對編譯期常量作瞭解釋。oracle 15-28
書中的例子:public static final int RAND_CONST = new Random().nextInt(); 導致RAND_CONST的值是不可預期的。
3.三元操作符的類型務必一致
1 public static void main(String[] args) { 2 int i = 80; 3 String s = String.valueOf(i < 100 ? 90 : 100); 4 String s1 = String.valueOf(i < 100 ? 90 : 100.0); 5 System.out.println(s); 6 System.out.println(s1); 7 System.out.println(s.equals(s1)); 8 }
輸出的結果為90,90.0,false
造成這種結果的原因是三元操作符是要返回一個類型的結果的,編譯器並不允許 條件為真時返回int 為假時返回float,所以三元操作符進行了類型轉換。
三元操作符類型轉換原則如下
1.若兩個操作數不可轉換,則不做轉換,返回值為Object類型。
2.若兩個操作數時明確類型的表達式,則按照正常的二進位數字來轉換。int轉換為long,long轉換為float等。
3.若兩個操作數有一個是數字S,另外一個是表達式,且其類型標識為T,那麼若數字S在T的範圍內,則轉換為T的類型,若S超出了T類型的範圍,則T轉換為S類型
4.若兩個數都是字面值(Literal)則返回值類型為範圍較大者。
4.避免帶有變長參數的方法重載
變長參數的方法重載不推薦使用主要是會對人產生誤導。
1 public static void sysout(String test) { 2 System.out.println("1.hello " + test); 3 } 4 5 public static void sysout(String... test) { 6 for (String string : test) { 7 System.out.println("2.hi " + string); 8 } 9 } 10 11 public static void main(String[] args) { 12 sysout("xu5hy"); 13 }View Code
輸出 1.hello xu5hy