2012年JAVA認(rèn)證:Java代碼常見錯(cuò)誤分析 |奧遠(yuǎn)科技是專注于信息化建設(shè)與互聯(lián)網(wǎng)產(chǎn)品開發(fā)的高新科技企業(yè),主要服務(wù)于百強(qiáng)企業(yè)、上市公司、大型集團(tuán)網(wǎng)站建設(shè)。承接大型電商網(wǎng)站、復(fù)雜功能型網(wǎng)站、APP、微信、小程序,oa辦公管理系統(tǒng),ERP管理系統(tǒng)開發(fā)。為客戶提供一站式網(wǎng)絡(luò)營銷解決方案,全國統(tǒng)一客服熱線:4000-880-989。 "> 2012年JAVA認(rèn)證:Java代碼常見錯(cuò)誤分析 |>2012年JAVA認(rèn)證:Java代碼常見錯(cuò)誤分析 ">

在教室伦流澡到高潮h免费视频,99久久亚洲精品无码毛片 ,精品淑女少妇AV久久免费,国产日产久久高清欧美一区WW

新聞中心

將想法與焦點(diǎn)與您共享

>2012年JAVA認(rèn)證:Java代碼常見錯(cuò)誤分析
作者:中國IT實(shí)驗(yàn)室    來源:中國IT實(shí)驗(yàn)室    發(fā)布時(shí)間:2012-05-03      瀏覽次數(shù):10034
分享到:
歡迎進(jìn)入Java社區(qū)論壇,與200萬技術(shù)人員互動(dòng)交流 >>進(jìn)入

    每一個(gè)程序員在編寫代碼的過程中都免不了出現(xiàn)錯(cuò)誤或是小的失誤,這些小的錯(cuò)誤和失誤往往使得程序員還得返工。那么,如何才能盡量避免這些錯(cuò)誤的發(fā)生呢?筆者總結(jié)只有在日常的編寫代碼中總結(jié)出經(jīng)驗(yàn),在這篇文章中,筆者列出了10個(gè)Java編程中常見的錯(cuò)誤,你可以把這些錯(cuò)誤添加到你的代碼審查的檢查列表中,這樣在經(jīng)過代碼審查后,你可以確信你的代碼中不再存在這類錯(cuò)誤了。

    一、常見錯(cuò)誤1:多次拷貝字符串

    測試所不能發(fā)現(xiàn)的一個(gè)錯(cuò)誤是生成不可變(immutable)對(duì)象的多份拷貝。不可變對(duì)象是不可改變的,因此不需要拷貝它。最常用的不可變對(duì)象是String。

    如果你必須改變一個(gè)String對(duì)象的內(nèi)容,你應(yīng)該使用StringBuffer。下面的代碼會(huì)正常工作:

    String s = new String (“Text here”);

    但是,這段代碼性能差,而且沒有必要這么復(fù)雜。你還可以用以下的方式來重寫上面的代碼:

    String temp = “Text here”;  String s = new String (temp);

    但是這段代碼包含額外的String,并非完全必要。更好的代碼為:

    String s = “Text here”;  二、常見錯(cuò)誤2:沒有克?。╟lone)返回的對(duì)象

    封裝(encapsulation)是面向?qū)ο缶幊痰闹匾拍睢2恍业氖牵?a class="channel_keylink" target="_blank">Java為不小心打破封裝提供了方便Java允許返回私有數(shù)據(jù)的引用(reference)。下面的代碼揭示了這一點(diǎn):

    import java.awt.Dimension;

    /** *//***Example class.The x and y values should never*be negative.*/

    public class Example…{

    private Dimension d = new Dimension (0, 0);

    public Example ()…{ }

    /** *//*** Set border=“1” Height and width. Both border=“1” Height and width must be nonnegative * or an exception is thrown.*/

    public synchronized void setValues (int border=“1” Height,int width) throws IllegalArgumentException…{

    if (border=“1” Height 《0 || width 《0)

    throw new IllegalArgumentException();

    d.border=“1” height = border=“1” Height;

    d. width = width;

    }

    public synchronized Dimension getValues()…{

    // Ooops! Breaks encapsulation

    return d;

    }  }

    Example類保證了它所存儲(chǔ)的border=“1” Height和width值永遠(yuǎn)非負(fù)數(shù),試圖使用setValues()方法來設(shè)置負(fù)值會(huì)觸發(fā)異常。不幸的是,由于getValues()返回d的引用,而不是d的拷貝,你可以編寫如下的破壞性代碼:

    Example ex = new Example();

    Dimension d = ex.getValues();

    d.border=“1” height = -5;  d. width = -10;

    現(xiàn)在,Example對(duì)象擁有負(fù)值了!如果getValues() 的調(diào)用者永遠(yuǎn)也不設(shè)置返回的Dimension對(duì)象的width 和border=“1” Height值,那么僅憑測試是不可能檢測到這類的錯(cuò)誤。

    不幸的是,隨著時(shí)間的推移,客戶代碼可能會(huì)改變返回的Dimension對(duì)象的值,這個(gè)時(shí)候,追尋錯(cuò)誤的根源是件枯燥且費(fèi)時(shí)的事情,尤其是在多線程環(huán)境中。

    更好的方式是讓getValues()返回拷貝:

    public synchronized Dimension getValues()…{

    return new Dimension (d.x, d.y);  }

    現(xiàn)在,Example對(duì)象的內(nèi)部狀態(tài)就安全了。調(diào)用者可以根據(jù)需要改變它所得到的拷貝的狀態(tài),但是要修改Example對(duì)象的內(nèi)部狀態(tài),必須通過setValues()才可以?! ∪?、常見錯(cuò)誤3:不必要的克隆

    我們現(xiàn)在知道了get方法應(yīng)該返回內(nèi)部數(shù)據(jù)對(duì)象的拷貝,而不是引用。但是,事情沒有絕對(duì):  /** *//*** Example class.The value should never * be negative.*/

    public class Example…{

    private Integer i = new Integer (0);

    public Example ()…{ }

    /** *//*** Set x. x must be nonnegative* or an exception will be thrown*/

    public synchronized void setValues (int x) throws IllegalArgumentException…{

    if (x 《0)

    throw new IllegalArgumentException();

    i = new Integer (x);

    }

    public synchronized Integer getValue()…{

    // We can“t clone Integers so we makea copy this way.

    return new Integer (i.intValue());

    }  }

    這段代碼是安全的,但是就象在錯(cuò)誤1#那樣,又作了多余的工作。Integer對(duì)象,就象String對(duì)象那樣,一旦被創(chuàng)建就是不可變的。因此,返回內(nèi)部Integer對(duì)象,而不是它的拷貝,也是安全的。

    方法getValue()應(yīng)該被寫為:

    public synchronized Integer getValue()…{

    // ”i“ is immutable, so it is safe to return it instead of a copy.

    return i;  }

    Java程序比C++程序包含更多的不可變對(duì)象。JDK 所提供的若干不可變類包括:

    ?Boolean

    ?Byte

    ?Character

    ?Class

    ?Double

    ?Float

    ?Integer

    ?Long

    ?Short

    ?String  ?大部分的Exception的子類

    四、常見錯(cuò)誤4:自編代碼來拷貝數(shù)組

    Java允許你克隆數(shù)組,但是開發(fā)者通常會(huì)錯(cuò)誤地編寫如下的代碼,問題在于如下的循環(huán)用三行做的事情,如果采用Object的clone方法用一行就可以完成:

    public class Example…{

    private int[] copy;

    /** *//*** Save a copy of ”data“。 ”data“ cannot be null.*/

    public void saveCopy (int[] data)…{

    copy = new int[data.length];

    for (int i = 0; i

    copy[i] = data[i];

    }  }

    這段代碼是正確的,但卻不必要地復(fù)雜。saveCopy()的一個(gè)更好的實(shí)現(xiàn)是:

    void saveCopy (int[] data)…{

    try…{

    copy = (int[])data.clone();

    }catch (CloneNotSupportedException e)…{

    // Can”t get here.

    }  }

[1] [2] 下一頁

?2008-2022 CORPORATION ALL Rights Reserved. 昆明奧遠(yuǎn)科技有限公司版權(quán)所有 滇ICP備09003328號(hào)-1 滇公網(wǎng)安備 53011102000818號(hào) 增值電信業(yè)務(wù)經(jīng)營許可證號(hào):滇B2-20110045
昆明那家網(wǎng)絡(luò)公司好,新媒體運(yùn)營,網(wǎng)站優(yōu)化,網(wǎng)絡(luò)推廣,網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站推廣,云南網(wǎng)站公司,昆明新媒體公司,云南網(wǎng)紅主播,昆明SEO公司,昆明網(wǎng)站建設(shè),昆明網(wǎng)絡(luò)推廣,昆明網(wǎng)站優(yōu)化,昆明網(wǎng)站推廣,紅河網(wǎng)站建設(shè),大理網(wǎng)絡(luò)公司,曲靖網(wǎng)絡(luò)公司,麗江網(wǎng)站設(shè)計(jì),昭通網(wǎng)絡(luò)公司,保山大數(shù)據(jù)服務(wù),智慧高速建設(shè),智慧校園服務(wù),云南IDC服務(wù)商,網(wǎng)絡(luò)安全測評(píng),等保測評(píng),網(wǎng)站關(guān)鍵詞排名優(yōu)化服務(wù),服務(wù)客戶盡超2000余家,一切盡在奧遠(yuǎn)科技,服務(wù)電話:13888956730
精品人妻码一区二区三区| 日韩人妻精品无码久久上司| 亚洲综合AV一区二区三区不卡| 欧美一区二区三区爽大粗| 无套内谢少妇毛片a片免费| 国产无遮挡又黄又爽免费视频| 亚洲熟妇丰满多毛xxxx| 久久产精品一区二区三区| 亚洲白嫩小受男同GV在线观看| 无码少妇精品一区二区免费| 无遮挡边摸边吃奶边做视频免费| 人妻丰满熟妇AV无码区动漫| 免费网站观看www免费下载| 精品国产乱码久久久久久蜜桃.| 国产 国语对白 露脸| 欧美性大战久久久久久久| 色欲久久久天天天综合网| 玩朋友的丰满人妻| 亚洲午夜精品A片久久WWW解说| 免费看无码毛视频成片| 欧美视频毛片在线播放| AV无码精品久久久久精品免费 | 男女啪啪久久精品亚洲A| 亚洲熟女色情网中文字幕| 中文字幕精品AV一区二区五区| 97精品国产一区二区三区| 亚洲精品久久国产高清| 97精品人人a片免费看| 人人狠狠综合久久88成人| 狠狠88综合久久久久综合网| 人妻少妇精品视频三区二区一区 | 日韩精品一区二区三区在线观看| 亚洲免费人成在线视频观看| 国产精品自在线拍国产| 欧美精品亚洲精品日韩专区| 精品久久久久久中文字幕| 日本免费观看| 人妻~夫の上司犯感との| 9277在线观看免费高清| 久久精品国产大片免费观看| 成人免费视频|