亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

編寫java代碼的幾點技巧

系統(tǒng) 1766 0

(1) bigdecimal中要使用string作為參數(shù)來構(gòu)造(bigdecimal.valueof()會把各種值轉(zhuǎn)化成字符串,再調(diào)用 bigdecimal(string)的) ,否則照樣會出問題;

Java代碼 復(fù)制代碼 ? 收藏代碼
  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來標(biāo)識 ,因為小寫字母l看起來有點像數(shù)字1;
例如:

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



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

Java代碼 復(fù)制代碼 ? 收藏代碼
  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代碼 復(fù)制代碼 ? 收藏代碼
  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代碼 復(fù)制代碼 ? 收藏代碼
  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區(qū)分開來
例如:

Java代碼 復(fù)制代碼 ? 收藏代碼
  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)有同學(xué)寫代碼,把 數(shù)字轉(zhuǎn)型為字串 時喜歡用類似 i+"" 這種方式,個人認(rèn)為這樣的代碼比較難看,可以寫成 string.valueof(i), 它是不是好看一些。


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

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

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


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


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

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



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

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

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

Java代碼 復(fù)制代碼 ? 收藏代碼
  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代碼 復(fù)制代碼 ? 收藏代碼
  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()永遠(yuǎn)不會返回null,所以沒有必要判斷l(xiāng)ist是否為null,這樣代碼更加簡潔、好看。

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

?

轉(zhuǎn)自: http://haouziwefe.iteye.com/blog/1147281

編寫java代碼的幾點技巧


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美999| 国产福利精品在线 | 亚洲精品久久久久久久网站 | 老子影院午夜伦不卡手机 | 人做人爱视频欧美在线观看 | 狠狠躁天天躁夜夜躁婷婷 | 香蕉青草久久成人网 | 久草在线中文 | 天天插天天插天天插 | 九九视频在线免费观看 | 激情奇米 | 曰鲁夜鲁鲁狠狠综合 | 中国日韩欧美中文日韩欧美色 | 成人午夜视频在线观看 | 九九精品国产99精品 | 欧美毛片aaaaa片久久久久 | 国产理论最新国产精品视频 | 九九51精品国产免费看 | 日本高清在线一区二区三区 | 九九99热久久国产 | 四虎影视国产精品永久在线 | 99在线免费观看视频 | 午夜精品久久久久久 | 四虎影音在线观看 | 中文字幕.com| 精品国产一区二区三区四区不 | 97超级碰碰碰碰精品 | 久久久精品日本一区二区三区 | 久久精品首页 | 综合伊人久久 | 日本中文字幕在线播放 | 亚洲欧美日韩精品久久亚洲区 | 欧美激情观看一区二区久久 | 国产一级视频 | 成人看的午夜免费毛片 | 中文字幕欧美日韩高清 | 在线日韩视频 | 日本亚州在线播放精品 | 国产日韩中文字幕 | 国产日韩久久久精品影院首页 | 亚洲精品国产高清不卡在线 |