博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ym——优化你的Java代码(新)
阅读量:5778 次
发布时间:2019-06-18

本文共 4760 字,大约阅读时间需要 15 分钟。

转载请注明本文出自Cym的博客(),谢谢支持!

1.面向对象的3要素。

2.面向对象开发的6大原则。

1.单一职责原则

应该有且仅有一个原因引起类的变更。

2.里氏替换原则

仅仅要父类能出现的地方,其子类就应该能出现。

也就是用子类替换父类后。保证程序照样执行。

3.依赖倒置原则

面向接口编程。

4.接口隔离原则

接口细化,也就是接口中的方法要尽量少。

5.迪米特法则

也称为最少知识原则,其定义为:一个对象应当对其它对象有最少的了解。也就是一个类中不要有过多的其它类。

6.开闭原则

开闭原则的核心是:对扩展开放。对改动关闭。

3.圈复杂度(Cyclomatic ComplexityCC

圈复杂度(下面简称CC)是一种度量方法,表明一个方法中运行路径的数量。

CC1開始,每多一个条件语句(ifelseswitch…casewhileforCC值加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;    }

你可能感兴趣的文章
《程序员自我修养》阅读笔记-编译和链接
查看>>
How to make apq8084
查看>>
集群Cluster介绍
查看>>
艾伟_转载:学习 ASP.NET MVC (第一回)理论篇
查看>>
艾伟也谈项目管理,敏捷个人:内容框架之执行力
查看>>
一起谈.NET技术,再次分享一个多选文件上传方案
查看>>
10款对开发者有用的Android应用
查看>>
应用Visual Studio 2010辅“.NET研究”助敏捷测试(上)
查看>>
JavaScript 判断当前设备是否是移动端还是PC
查看>>
你的睡眠时间和睡眠质量达标了么?
查看>>
让 UILabel 垂直方向顶端对齐的代码
查看>>
Hibernate---->第一个例子
查看>>
Android学习之Service命令的妙用
查看>>
封装好的实用的读写XML类---增删改查XML
查看>>
和角公式与倍角公式
查看>>
在mac console下 执行c++文件
查看>>
REST构架风格介绍:状态表述转移(转)
查看>>
CSS - 背景图片拉伸的方法
查看>>
杨氏矩阵查找
查看>>
Silverlight WCF RIA服务(三十五)身份验证、角色、个性化 6
查看>>