ym——优化你的Java代码(新)
转载请注明本文出自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代码(新)相关推荐
- Linkedin 工程师如何优化他们的 Java 代码
最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍了Linkedin信息流中间层Feed Mixer,它为Linkedin的Web主页,大学主页,公 ...
- Linkedin工程师是如何优化他们的Java代码的
最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍了Linkedin信息流中间层Feed Mixer,它为Linkedin的Web主页,大学主页,公 ...
- asp java 变量_ASP_用stack变量优化Java代码, java程序包含了大量的对象 - phpStudy...
用stack变量优化Java代码 java程序包含了大量的对象,我们需要了解它们是从哪里被访问的,变量存储于何处对程序的性能有显著的影响--尤其是某些需要被频繁访问的变量. 我们写一个Java类,在其 ...
- 从Java代码到Java堆理解和优化您的应用程序的内存使用
从Java代码到Java堆理解和优化您的应用程序的内存使用 简介: 本文将为您提供 Java? 代码内存使用情况的深入见解,包括将 int 值置入一个Integer 对象的内存开销.对象委托的成本和不 ...
- java代码统计收藏量_干货收藏 | 35个Java 代码性能优化总结(上)
原标题:干货收藏 | 35个Java 代码性能优化总结(上) 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这 ...
- 44个Java代码性能优化总结
转载自 44个Java代码性能优化总结 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是 ...
- 【Java】44个Java代码性能优化总结
1.概述 转载:44个Java代码性能优化总结 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最 ...
- java 代码性能优化_Java代码性能优化的几个小技巧
Java代码性能优化的几个小技巧 时间:2017-08-07 来源:华清远见JAVA学院 代码优化是程序员必须懂得一门学问,所以不管是程序员还是准程序员,养成良好的代码优化习惯都是必须要养成的 ...
- 在 Eclipse Galileo 中更快地编写 Java 代码使用新的 toString() 生成器
http://www.ibm.com/developerworks/cn/opensource/os-eclipse-codegen/ 这个代码生成技巧使用 Eclipse Galileo 中的新特性 ...
- java代码优化_java代码之美(11)---java代码的优化
java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...
最新文章
- R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用nfactors参数指定抽取的因子个数、fa函数因子分析结果解读
- 数学界的隐士:世界上最奇怪的数学天才,被奖励100万却拒领
- nsdata是java什么类型_Swift中基本数据类型与NSData转换
- 文件系统损坏导致数据文件异常恢复----惜分飞
- 微软模拟飞行2020服务器多少内存,《微软模拟飞行2020》配置公开,想玩爽还需玩家加大投入...
- 简单的shell脚本实例
- pandas将某一列变为索引_Pandas 基础语法入门
- PHP7.2 redis
- 全部都显示服务器已加扰,特殊字符在浏览器中正确显示,但在phpMyAdmin中加扰...
- Git和SourcesTree的安装
- (未完毕)电子设计省赛--2013年国赛题
- RISC-V MCU 自动浇花装置设计
- 谷歌浏览器发送POST请求(测试Post接口)
- 天大2021年秋学期考试《网页设计与制作》离线作业考核试题
- RGB与CMYK这两大色彩模式的区别
- ZZULIOJ:1044: 不及格率
- android手机home键,手机Home键在哪里?手机Home键是什么意思?
- cocos2d-x 3.17.2 调用cocos studio发布的csb文件,遇到按钮图片显示不正常问题
- 群星闪耀 视觉科技史上引领我们前进的不朽瞬间
- 2021年过了大半了,脑机接口取得哪些进展?
热门文章
- 区块链 常用词汇定义
- java 分布式同步锁_java编程进阶之路:回归锁的本质,探索分布式锁之源头
- GAMES101 Rasteriztion
- 创建一个war类型的maven项目
- java基础总结06-常用api类-Object和Objects
- 二、常量、变量和基本数据类型
- MYSQL 某个数据库下所有表的 批量删除表语句
- Nginx/Apache 对图片,css,js等优化,静态页面设置过期时间
- Linux 之 CentOS 7.2 安装 Java JDK
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_12-页面静态化-页面静态化流程...