ym——最佳化你的Java代碼(新)

來源:互聯網
上載者:User

標籤:最佳化   bre   java   面向   流程   mod   get   裡氏替換   路徑   

轉載請註明本文出自Cym的部落格(http://blog.csdn.net/cym492224103),謝謝支援!


1.物件導向的3要素。


2.物件導向開發的6大原則。

1.單一職責原則

應該有且僅有一個原因引起類的變更。

2.裡氏替換原則

僅僅要父類能出現的地方,其子類就應該能出現。

也就是用子類替換父類後。保證程式照樣執行。

3.依賴倒置原則

面向介面編程。

4.介面隔離原則

介面細化,也就是介面中的方法要盡量少。

5.迪米特法則

也稱為最少知識原則,其定義為:一個對象應當對其它對象有最少的瞭解。也就是一個類中不要有過多的其它類。

6.開閉原則

開閉原則的核心是:對擴充開放。對改動關閉。


3.循環複雜度(Cyclomatic Complexity,CC)

循環複雜度(下面簡稱CC)是一種度量方法,表明一個方法中運行路徑的數量。

CC從1開始,每多一個條件陳述式(if。else。switch…case。while,for)CC值加1;

一個方法的CC值越大,表明該方法越複雜;

CC值指明了全然測試一個方法所須要的測試用例。


4.循環複雜度度量

CC∈[0,5]:代碼品質不錯;

CC∈[6,20]:可能存在須要拆分的代碼,應該儘可能想辦法重構。

CC∈[21, ∞ ):必須進行重構。假設你的代碼CC常常達到這個水平,請又一次整理Coding的思路;

請儘可能保證CC<10。


5.循環複雜度計算

V(G) = e – n + 2;

V(G):循環複雜度

e:程式流程圖中的邊數。

n:程式流程圖中的節點數;


6.循環複雜度計算

代碼:

void test() {     int cnt = 0;     for(int I = 0;I < 100;i++) {         cnt++;     }     if(cnt > 100) {          System.out.println();     }     …}

對應流程圖:



7.減少循環複雜度

方法一

提煉函數,抽取方法:

最佳化前:

Int  getAppKey(String user, String package) {    String userId = “”;    String packageId = “”;    System.out.println(“=============”);    if(null == user) {        System.out.println(“user id is null.”);    } else {        userId = “user_” + id1;        System.out.println(“userid is ” + userId );    } if(null == package) {        System.out.println(“packageId id is null.”);    } else {        packageId = “package_” + id2;        System.out.println(“packageId is ” + packageId );    }            System.out.println(“=============”);    return userId .hashCode()  ^ packageId .hashCode();}

最佳化後:

Int  getAppKey(String user, String package) {    String userId = geId(“user_”, user);    String packageId = getId(“package_”, package);        printId(userId,  packageId );    return userId .hashCode()  ^ packageId .hashCode();}String getId(String head, String key) {    String id = “”;    if(key != null) {        id=  head + user;    }     return id;}String getPrintInfo(String name, String value) {    String info = name + “is ” + value;    if(“”.equals(value)) {        info = name + “is null.”;    }     return id;}void printId(String  userId , String packageId)  {    System.out.println(“=============”);    System.out.println(getPrintInfo(“userId”, userId));    System.out.println(getPrintInfo(“packageId”, packageId));    System.out.println(“=============”);}


方法二

用迴圈覆寫準則式:

最佳化前:

String getName(String id) {        String name = null;        if("0000".equals(id)) {            name = "小吳";        }        if("0001".equals(id)) {            name = "小王";        }        if("0002".equals(id)) {            name = "老趙";        }        if("0003".equals(id)) {            name = "小李";        }        if("0004".equals(id)) {            name = "小劉";        }        if("0005".equals(id)) {            name = "小張";        }        return name;    }

最佳化後:

private static String getName(String id) {        String name = null;        //當元素個數較多的時候,將數組替換成Map。數組對象可作為參數傳入。

String[] idArray = new String[]{"0000", "0001", "0002", "0003", "0004", "0005"}; String[] nameArray = new String[]{"小吳", "小王", "老趙", "小李", "小劉", "小張"}; for(int i = 0;i < idArray.length;i++) { Object peopleID = idArray[i]; if(peopleID.equals(id)) { name = nameArray[i]; break; } } return name; }


方法三

用初始值消減條件分支:

最佳化前:

String getCode(String id) {        String code = "";                if(null == id) {            code = "0000";        } else {            code = "00" + id;        }        return code;    }

最佳化後:

String getCode(String id) {                //初始化時設為預設值        String code = "0000";                if(id != null) {            code = "00" + id;        }        return code;    }

方法四

函數取代參數:

最佳化前:

String getValue(String param) {                String value = null;                if("name".equals(param)) {            value = mName;        } else if("hight".equals(param)) {            value = mHight;        } else if("X".equals(param)) {            value = mX;        } else if("Y".equals(param)) {            value = mY;        }                return value;    }

最佳化後:

 String getName() {        return mName;    }        private static String getHight() {        return mHight;    }        private static String getX() {        return mX;    }        private static String getY() {        return mY;    }


方法五

用參數應對變化:

最佳化前:

private static int getWidth(int val) {                int width = 0;                if(val == 10) {            width += ((val << 2) ^ 0x10) * 200;        } else if(val == 100) {            width += ((val << 2) ^ 0x1a) * 200;        }                return width;    }

最佳化後:

private static int getWidth(int val) {                int width = 10;                width += getDeta(val, 0x10);        width += getDeta(val, 0x1a);                return width;    }        private static int getDeta(int val, int trim) {        int deta = 0;        if(val == range) {            deta = ((val << 2) ^ trim) * 200;        }        return deta;    }

ym——最佳化你的Java代碼(新)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.