转载请注明本文出自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;}

转载于:https://www.cnblogs.com/wzjhoutai/p/7163086.html

ym——优化你的Java代码(新)相关推荐

  1. Linkedin 工程师如何优化他们的 Java 代码

    最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍了Linkedin信息流中间层Feed Mixer,它为Linkedin的Web主页,大学主页,公 ...

  2. Linkedin工程师是如何优化他们的Java代码的

    最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍了Linkedin信息流中间层Feed Mixer,它为Linkedin的Web主页,大学主页,公 ...

  3. asp java 变量_ASP_用stack变量优化Java代码,  java程序包含了大量的对象 - phpStudy...

    用stack变量优化Java代码 java程序包含了大量的对象,我们需要了解它们是从哪里被访问的,变量存储于何处对程序的性能有显著的影响--尤其是某些需要被频繁访问的变量. 我们写一个Java类,在其 ...

  4. 从Java代码到Java堆理解和优化您的应用程序的内存使用

    从Java代码到Java堆理解和优化您的应用程序的内存使用 简介: 本文将为您提供 Java? 代码内存使用情况的深入见解,包括将 int 值置入一个Integer 对象的内存开销.对象委托的成本和不 ...

  5. java代码统计收藏量_干货收藏 | 35个Java 代码性能优化总结(上)

    原标题:干货收藏 | 35个Java 代码性能优化总结(上) 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这 ...

  6. 44个Java代码性能优化总结

    转载自 44个Java代码性能优化总结 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是 ...

  7. 【Java】44个Java代码性能优化总结

    1.概述 转载:44个Java代码性能优化总结 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最 ...

  8. java 代码性能优化_Java代码性能优化的几个小技巧

    Java代码性能优化的几个小技巧 时间:2017-08-07     来源:华清远见JAVA学院 代码优化是程序员必须懂得一门学问,所以不管是程序员还是准程序员,养成良好的代码优化习惯都是必须要养成的 ...

  9. 在 Eclipse Galileo 中更快地编写 Java 代码使用新的 toString() 生成器

    http://www.ibm.com/developerworks/cn/opensource/os-eclipse-codegen/ 这个代码生成技巧使用 Eclipse Galileo 中的新特性 ...

  10. java代码优化_java代码之美(11)---java代码的优化

    java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...

最新文章

  1. R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用nfactors参数指定抽取的因子个数、fa函数因子分析结果解读
  2. 数学界的隐士:世界上最奇怪的数学天才,被奖励100万却拒领
  3. nsdata是java什么类型_Swift中基本数据类型与NSData转换
  4. 文件系统损坏导致数据文件异常恢复----惜分飞
  5. 微软模拟飞行2020服务器多少内存,《微软模拟飞行2020》配置公开,想玩爽还需玩家加大投入...
  6. 简单的shell脚本实例
  7. pandas将某一列变为索引_Pandas 基础语法入门
  8. PHP7.2 redis
  9. 全部都显示服务器已加扰,特殊字符在浏览器中正确显示,但在phpMyAdmin中加扰...
  10. Git和SourcesTree的安装
  11. (未完毕)电子设计省赛--2013年国赛题
  12. RISC-V MCU 自动浇花装置设计
  13. 谷歌浏览器发送POST请求(测试Post接口)
  14. 天大2021年秋学期考试《网页设计与制作》离线作业考核试题
  15. RGB与CMYK这两大色彩模式的区别
  16. ZZULIOJ:1044: 不及格率
  17. android手机home键,手机Home键在哪里?手机Home键是什么意思?
  18. cocos2d-x 3.17.2 调用cocos studio发布的csb文件,遇到按钮图片显示不正常问题
  19. 群星闪耀 视觉科技史上引领我们前进的不朽瞬间
  20. 2021年过了大半了,脑机接口取得哪些进展?

热门文章

  1. 区块链 常用词汇定义
  2. java 分布式同步锁_java编程进阶之路:回归锁的本质,探索分布式锁之源头
  3. GAMES101 Rasteriztion
  4. 创建一个war类型的maven项目
  5. java基础总结06-常用api类-Object和Objects
  6. 二、常量、变量和基本数据类型
  7. MYSQL 某个数据库下所有表的 批量删除表语句
  8. Nginx/Apache 对图片,css,js等优化,静态页面设置过期时间
  9. Linux 之 CentOS 7.2 安装 Java JDK
  10. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_12-页面静态化-页面静态化流程...