《改善java代码》第一章:java开发通用原则
1、命名:包名全小寫,類名首字母全大寫,常量全部大寫并用下劃線分割,變量采用駝峰命名法
2、三元操作符:
int i=80;
String s1= String.value(i<90?90:100);
String s2= String.value(i<90?90:100.0);
返回值不一樣,s1返回90,s2返回90.0
3、反序列化時,構造函數不會執行,final變量會被重新賦值。 如果在升級的類中有一個final變量是構造函數賦值的,而且新舊版本還發生了變化,則在應用請求熱切的過程中,很可能出現反序列化生成的final變量值與新產生的實例值不相同的情況,于是業務異常就產生了,嚴重的話,會影響交易數據。
因此,在序列化類中,不使用構造函數為final變量賦值。如果final變量是方法賦值的,如:final String name=initName(),則final并不會被重新賦值,之前說final變量會被重新賦值是說簡單對象,包括8個基本類型,以及數組、字符串。
4、工資分為績效工資和基本工資,需要對績效工資保密。
方法1:績效工資前加transient。這樣做標志著工資類市區了分布式部署的功能,一旦遇到性能瓶頸,再想實現分布式部署就不可能了,此方法不可行。
5、instanceof
'A' instanceof Character :編譯不通過,因為instance只能用于對象的判斷,不能用于基本類型的判斷。
null instanceof String : 返回值為false,若左操作數是null,結果就直接返回false,不再運算右操作數是什么類。使用于 (String)null instanceof String一樣為false
new Date() instanceof String 編譯不通過,因為Date類合String沒有繼承和實現關系,所以編譯時直接報錯。
"string" instanceof Object :? 返回值為true,"string"是一個字符串,字符串又繼承了Object,故返回true
new Object() instanceof String: 返回值為false,Object為父類。
6、我們常把項目中的常量全部放在一個類中,如public class Constant { public final static int MAX_AGE =120;}? 我們用的時候,只需要Constant.MAX_AGE。此時,如果改了Constant的MAX_AGE值為180,但是在原始的編譯器重新運行后發現,用到該常量的值仍然為120,原因是,對于final修飾的基本類型和String類型,編譯器會認為它是穩定態,所以在編譯時就直接把值編譯到字節碼中了,避免了在運行期運用,以提高代碼的執行效率。但是final修飾的是類,則編譯器會認為它是不穩定態,采用引用關系。
注:在現在的編譯器沒有這個問題,一律采用引用關系,但是潛在的風險仍然存在。
轉載于:https://www.cnblogs.com/yaohuiqin/p/9284612.html
總結
以上是生活随笔為你收集整理的《改善java代码》第一章:java开发通用原则的全部內容,希望文章能夠幫你解決所遇到的問題。