欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

編寫java代碼的幾點技巧

系統 1831 0

(1) bigdecimal中要使用string作為參數來構造(bigdecimal.valueof()會把各種值轉化成字符串,再調用 bigdecimal(string)的) ,否則照樣會出問題;

Java代碼 復制代碼 ? 收藏代碼
  1. system.out.println( 10000 * 1.005 );????????system.out.println( new ?bigdecimal( 10000 ).multiply( new ?bigdecimal( 1.005 )));??????system.out.println(bigdecimal.valueof( 10000 ).multiply(bigdecimal.valueof( 1.005 )));??????system.out.println( new ?bigdecimal( "10000" ).multiply( new ?bigdecimal( "1.005" )));??
    		system.out.println(10000*1.005);		system.out.println(new bigdecimal(10000).multiply(new bigdecimal(1.005)));		system.out.println(bigdecimal.valueof(10000).multiply(bigdecimal.valueof(1.005)));		system.out.println(new bigdecimal("10000").multiply(new bigdecimal("1.005")));
  

輸出:
10049.999999999998
10049.99999999999893418589635984972119331359863281250000
10050.000
10050.000



(2) 長整型要使用大寫字母l而不是小寫字母l來標識 ,因為小寫字母l看起來有點像數字1;
例如:

Java代碼 復制代碼 ? 收藏代碼
  1. long ?i?=?200l; //看起來是不是像2001呢;????long?i?=?200l;//這樣,就算有近視,也能辨認清楚了。 ??
        long i = 200l;//看起來是不是像2001呢;    long i = 200l;//這樣,就算有近視,也能辨認清楚了。
  



(3) 如果一個類中有多處使用長數字,則可以定義并使用數字常量 ,到處寫長的數字,容易出現多一個0或少一0等寫錯位數的問題,同時導致問題難以排查。
例如:

Java代碼 復制代碼 ? 收藏代碼
  1. if (i?>? 10000000 ?&amp;&amp;?i< 100000000 )?{...} if (j?>=? 10000000 ?&amp;&amp;?j<= 100000000 )?{...}??
    if(i > 10000000 &amp;&amp; i<100000000) {...}if(j >= 10000000 &amp;&amp; j<=100000000) {...}
  

可改成:

Java代碼 復制代碼 ? 收藏代碼
  1. final ? int ?begin?=? 10000000 ; //或?final?int?begin?=?10*1000*1000;final?int?end?=?100000000;//或?final?int?end?=?100*1000*1000if?(i?>?begin?&amp;&amp;?i<?end){...}if?(j?>=?begin?&amp;&amp;?j<=?end){...} ??
    final int begin = 10000000;//或 final int begin = 10*1000*1000;final int end = 100000000;//或 final int end = 100*1000*1000if (i > begin &amp;&amp; i< end){...}if (j >= begin &amp;&amp; j<= end){...}
  


再如timeunit中的代碼:

Java代碼 復制代碼 ? 收藏代碼
  1. //?handy?constants?for?conversion?methods????static?final?long?c0?=?1l;????static?final?long?c1?=?c0?*?1000l;????static?final?long?c2?=?c1?*?1000l;????static?final?long?c3?=?c2?*?1000l;????static?final?long?c4?=?c3?*?60l;????static?final?long?c5?=?c4?*?60l;????static?final?long?c6?=?c5?*?24l; ??
        // handy constants for conversion methods    static final long c0 = 1l;    static final long c1 = c0 * 1000l;    static final long c2 = c1 * 1000l;    static final long c3 = c2 * 1000l;    static final long c4 = c3 * 60l;    static final long c5 = c4 * 60l;    static final long c6 = c5 * 24l;
  




(4) 在使用map時,要注意integer與long的自動裝箱,要與string類型的key區分開來
例如:

Java代碼 復制代碼 ? 收藏代碼
  1. map<string,string>?hm?=? new ?hashmap<string,string>();???????hm.put( "1" ,? "1value" );??????hm.put( "2" ,? "1value" );??????hm.put( "3" ,? "1value" );??????hm.put( "4" ,? "1value" );?????????????? int ?i?=? 1 ;??????system.out.println(hm.get(i+ 1 )); //錯誤的做法,值為null??????system.out.println(hm.get(string.valueof(i+1)));//正確的做法 ??
    		map<string,string> hm = new hashmap<string,string>();		hm.put("1", "1value");		hm.put("2", "1value");		hm.put("3", "1value");		hm.put("4", "1value");				int i = 1;		system.out.println(hm.get(i+1));//錯誤的做法,值為null		system.out.println(hm.get(string.valueof(i+1)));//正確的做法
  


輸出:
null
1value
因為i+1計算后自動裝箱成integer(2),而hm.get(new integer(2)) 與hm.get(new string(2))是完全不一樣的。


(5)有同學寫代碼,把 數字轉型為字串 時喜歡用類似 i+"" 這種方式,個人認為這樣的代碼比較難看,可以寫成 string.valueof(i), 它是不是好看一些。


(6) 對于復雜的判斷條件,最好不要經常使用“非”等排除條件式子 ,這樣不便于理解組合條件的含義:
例如:
?? 如果 成功方案贏利≥1000元 或 成功方案贏利≥500元且回報率≥10倍 則返回戰績,否則 返回0;

不便于直接思維的、排除式的寫法:

Java代碼 復制代碼 ? 收藏代碼
  1. if ?(profit.compareto(minprofit)?<? 0 ?&amp;&amp;?(profit.compareto(minrateprofit)?<? 0 ?||?rate.compareto(minrate)?<? 0 ))?{???????????? return ? 0 ;?}? else ?{ return ?戰績值;}??
     if (profit.compareto(minprofit) < 0 &amp;&amp; (profit.compareto(minrateprofit) < 0 || rate.compareto(minrate) < 0)) {            return 0; } else {return 戰績值;}
  


這個是正確的寫法,但是因為整合條件都要反過來寫,類似:a&amp;&amp;b 變成 !a||!b,很難理解,也極容易把(!a || !b)寫成 (!a &amp;&amp; !b)。


便于理解的、直觀式的寫法:

Java代碼 復制代碼 ? 收藏代碼
  1. if ?(profit.compareto(minprofit)?>=? 0 ?&amp;&amp;?(profit.compareto(minrateprofit)?>=? 0 ?&amp;&amp;?rate.compareto(minrate)?>=? 0 ))?{??????? return ?戰績值;} else ?{??? return ? 0 ;?}??
     if (profit.compareto(minprofit) >= 0 &amp;&amp; (profit.compareto(minrateprofit) >= 0 &amp;&amp; rate.compareto(minrate) >= 0)) {       return 戰績值;}else {   return 0; }
  



(7)經常看見list!=null &amp;&amp; list.size()>0 這樣的代碼,大概擔心用到的list為null而導致空指針異常,其實list!=null一般是沒有必要,這樣的代碼比較難看一點。

《effective java》建議:對返回值為collection或map的子類的,盡量返回一個元素為空的collection或map,而不是返回null。

事實上,很多開源的框架中就是這么做的,看下面應用hibernate的一段代碼:

Java代碼 復制代碼 ? 收藏代碼
  1. query?q?=?*dao.createquery(hql);???????list<?>?list?=?q.list();??????? if ?(list?!=? null ?&amp;&amp;?list.size()?>? 0 )?{?????????? return ?(dcrace)?list.get( 0 );???????}??
            query q = *dao.createquery(hql);       list<?> list = q.list();       if (list != null &amp;&amp; list.size() > 0) {          return (dcrace) list.get(0);       }
  


可以改為:

Java代碼 復制代碼 ? 收藏代碼
  1. query?q?=?*dao.createquery(hql);???????list<?>?list?=?q.list();??????? if ?(list.size()?>? 0 )?{ //刪除?list?!=?null?&amp;&amp;???????????return?(dcrace)?list.get(0);???????} ??
            query q = *dao.createquery(hql);       list<?> list = q.list();       if (list.size() > 0) {//刪除 list != null &amp;&amp;           return (dcrace) list.get(0);       }
  


事實上,q.list()永遠不會返回null,所以沒有必要判斷list是否為null,這樣代碼更加簡潔、好看。

(8)bigdecimal是一個只讀類,它的對象一旦構建好了,就無法修改該該對象的屬性。如:
public bigdecimal setscale(int newscale, int roundingmode)
public bigdecimal add(bigdecimal augend)
等方法都是返回一個新的bigdecimal對象,而對原來的bigdecimal不會起熱任何修改作用的。jdk中類似的只讀類還有:所有的基本數據類型,所有的數據封裝類,biginteger,string等。

?

轉自: http://haouziwefe.iteye.com/blog/1147281

編寫java代碼的幾點技巧


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产 日韩 欧美 亚洲 | 香蕉成人啪国产精品视频综合网 | writeas桌下口| 国产精品怕怕怕视频免费 | 色综合久久婷婷天天 | 大片免费看费看大片 | 日本欧美一区二区三区视频 | 久久高潮 | 国产精品偷拍 | 亚洲精品久久一区二区三区四区 | 黄色片视频免费看 | 国产高清永久免费 | 亚洲免费观看视频 | 欧美两性人xxxx高清免费 | 五月婷婷开心综合 | 日本中文字幕在线播放 | 日本夜爽爽一区二区三区 | 亚洲一区播放 | 日日做夜夜操 | 91 中文字幕| 日韩在线免费播放 | 久久视频这里只精品3国产 色偷偷偷 | 午夜小视频免费观看 | 一级毛片观看 | 九九99九九在线精品视频 | WWW国产亚洲精品久久久 | 97青青青国产在线播放 | 国产精品原创av片国产免费 | 九九福利影院 | 欧美午夜色视频国产精品 | 天天看高清特色大片 | 丁香六月婷婷在线 | 日韩a在线观看 | 亚洲浮力影院 | 国产精品一码二码三码在线 | 黄色片快播 | 日本高清电影在线播放 | 亚洲综合在线视频 | 网友自拍视频在线 | 欧美日韩综合精品一区二区三区 | 欧美亚洲理伦电影毛片在线播放 |