订阅博客
收藏博客
微博分享
QQ空间分享

甘草片的功效与作用,什么样的代码是好代码?读阿里JAVA开发手册有感而发,世界名表排行榜

频道:全民彩票网网址 标签:晋中中华活血龙 时间:2020年02月14日 浏览:155次 评论:0条

原文链接:https://juejin.im/post/5da5e810518825420a28151c

最近重温阿里巴巴Java开发手册这本书,考虑了什么样的代码是好代码,给咱们共享一下我的主意,有哪里不对,欢迎指出,感激不尽。

什么样的代码是好代码?

什么是好代码?完成了功用的代码仅仅合格的代码,而真实的好代码具有以下特色:

  • 命名易于了解,语义表达明晰而不需人揣摩
  • 代码逻辑明晰通明,层次清楚
  • 代码格局公整漂亮
  • 功用效率高
  • 安全性高

好的命名

好的命名,命名易于了解,语义表达明晰。 是酝酿好代码的第一步。以下罗列阿里JAVA开发手册的几点,都是在强调好的命名,以便于阅览。

抽象类命名运用 Abstract 或 Base 最初;反常类命名运用 Exception 结束;测验类 命名以它要测验的类的称号开端,以 Test 结束。

理由:咱们约好俗成这样写,阅览者一看这个类就知道它是抽象类仍是反常类,岂不美哉。

引荐指数:五星

根绝完全不规范的缩写,防止望文不知义。

理由:AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类随意缩写严峻降低了代码的可阅览性

引荐指数:五星

为了到达代码自解说的方针,任何自界说编程元素在命名时,运用尽量完好的单词 组合来表达其意

正例:在 JDK 中,表达原子更新的类名为:AtomicReferenceFieldUpdater。

反例:变量 int a回春医疗保健操 的随意命名办法

理由:完好的单词,表达意思更清楚。

引荐指数:四星

假如模块、接口、类、办法运用了规划形式,在命名时需表现出具沃尔沃s60l体形式。

正例:

 public class OrderFactory; 
public class LoginProxy;
public class ResourceObserver;
仿制代码

理由:将规划形式表现在姓名中,有利于阅览者快速了解架构设story计理念。

引荐指数:四星

不允许任何魔法值(即未经预先界说的常量)直接呈现在代码中。

反例:

String key = "Id#taobao_" + tradeId; 
cache.put(key, value);
仿制代码

理由:魔法值只要开发者自己知道,或许过一段时刻他自己也不知道了。。。还谈何保护。。。

引荐指数:五星

枚举类名主张带上 Enum 后缀,枚举成员称号需求全大写,单词间用下划线离隔。

正例:枚举姓名为 ProcessStatusEnum 的成员称号:SUCCESS / UNKNOWN_REASON。

理由:枚举其实便是特别的类,域成员均为常量,且结构办法被默许强制是私有。

引荐指数:三星

明晰的结构,清楚的youth层次,明晰的逻辑

好的代码,还表现在明晰的结构,清楚的层次,明晰的逻辑。不只表现在代码功用层明上,代码块、函数各司其职,契合规划形式规划理念,还表现在项目结构概括清楚。罗列了以下几点:

不要运用一个常量类保护一切常量,要按常量功用进行归类,分隔保护。

正例:缓存相关常量放在类 CacheConsts 下,体系配置相关常量放在类 ConfigConsts 下。

理由:大而全的常量类,乱七八糟,运用查找功用才干定位到修正的常量,不利于了解和保护。

引荐指数:四星

一个过于冗长的函数或许一段需求注释才干让人了解用处的代码,能够考虑把它切分红一个功用明晰的函数单元,并界阐明晰简略的函数名,这样会让代码变得愈加高雅。

反例:

 private String name;
private Vector orders = new Vector();
public void printOwing() {
//print banner
System.out.println("****************");
System.out.println("*****customer Owes *****");
System.out同聚网.pr潘和忠i广州好玩的当地ntln("****************");
//calculate totalAmount
Enumeration env = orders.elements();
double totalAmount = 0.0;
while (env.hasMoreElements()) {
甘草片的成效与效果,什么样的代码是好代码?读阿里JAVA开发手册有感而发,国际名表排行榜Order order = (Order) env.nextElement();
totalAmount += order.getAmout();
}
//print details
System.out.println("name:" + name);
System.out.println("amount:" + totalAmount);
}
仿制代码

正例:

private String name;
private Vector orders = new Vector();
public void printOwi甘草片的成效与效果,什么样的代码是好代码?读阿里JAVA开发手册有感而发,国际名表排行榜ng() {

//print banner
printBanner();
//calculate totalAmount
double totalAmount = getTotalAmount();
//print details
printDetail(totalAmount);旋风少女1
}
void printBanner(){
System.out.println("****************");
System.out.println("*****customer Owes *****");
System.out.println("****************");
}
double getTotalAmount(){
Enumeration env = orders.elements();
double totalAmount = 0.0;
while (env.hasMoreElements()) {
Order order = (Order) env.nextElemen言情小说大全t();
totalAmount += order.getAmout();
}
return totalAmount;
}
void printDetail(double totalAmo吴悦彤unt){
System.out.println("name:" + name);
System.out.println("amount:" + totalAmount);
}
仿制代码

引荐指数:四星

运用多态或许恰当的规划形式代替杂乱冗长的if...else/switch

比方:

 int getArea() {
switch (shape){
cas甘草片的成效与效果,什么样的代码是好代码?读阿里JAVA开发手册有感而发,国际名表排行榜e SHAPE.CIRCLE:
return 3.14 * _r * _r; break;
case SHAPE.RECTANGEL;
return width *,heigth;
}
}
仿制代码

运用多态后:

class Shape {
int getArea(){};
}
class Circle extends Shape {
int getArea() {
return 3.14 * r * r;
}
}
class Rectangel extends Shape {
int getArea() {
return width * heigth;
}
}
仿制代码

引荐指数:三星

项目结构需求概括清楚,简言之分包名区分清楚。

阐明:如下为rocketMq源码项目结构图。

引荐指数:甘草片的成效与效果,什么样的代码是好代码?读阿里JAVA开发手册有感而发,国际名表排行榜四星

代码格局高雅

高雅的代码格局,是使代裴涩琪码有个美观的皮郛,所以平常写代码留意用快捷键优化一下格局。

大括号的运用约好。假如是大括号内为空,则简练地写成{}即可,不需求换行;假如 对错空代码块则

  • 1) 左大括号前不换五花肉的做法大全行。
  • 2) 左大括号后换行。
  • 3) 右大括号前换行。
  • 4) 右大括号后还有 else 等代码则不换行;表明停止的右大括号后有必要换行。

引荐指数:五星

左小括号和字符之间不呈现空格;相同,右小括号和字符之间也不呈现空格;而左大 括号前需求空格

反例:

if (空格 a == b 空格)
仿制代码

引荐指数:五星

不同逻辑、不同语义、不同事务的代码之间刺进一个空行分离隔来以进步可读性。

阐明:任何景象,没有必要刺进多个空行进行离隔。

引荐指数:四星

效率性

单单有美观的皮郛当然仍是不行,还要耐久有用呢,才干称得上好腰杆代码。阿里开发手册以下几点,都有助于进步代码功用。当然,除了这些,还有日常开发中,哪些代码流程是否能够优化,哪些接口是否调用多了,那些代码是不是没用到。总归,这个要看自己总结与堆集。

调集初始化时,指定调集初始值巨细。甘草片的成效与效果,什么样的代码是好代码?读阿里JAVA开发手册有感而发,国际名表排行榜

阐明:HashMap 运用 HashMap(int initialCapacity) 初始化。

正例:initialCapacity = (需求存储的元素个数 / 冬瓜汤负载因子) + 1。留意负载因子(即loader factor)默许为 0.75,假如暂时无法确认初始值巨细,请设置为 16(即默许值)。

反例:HashMap 需求放置 1024 个元素,因为没有设置容量初始巨细,跟着元素不断增加,容 量 7 次被逼扩展,resize 需求重建 ha奔跑gl350sh 表,严峻影响功用。

引荐指数:四星

线程资源有必要经过线程池供给,不允许在运用中自行显式创立线程。

阐明:运用线程池的优点是削减在创立和毁掉线程上所耗费的时刻以及体系资源的开支,处理 资源缺乏的问题。假如不运用线程池,有或许形成体系创立很多同类线程而导致耗费完内存或 者“过度切换”的问题。

关于接口艺龙网功用,能够考虑缓存,分批,SQl索引等这些手法。

阐明:以上几点,是针对代码块的功用优化。关于接口,跟SQL有关的话,考虑增加索引等手法,假如触及很多数据,能够考虑分批思维,还能够考虑增加缓存,冷热数据区分等。

安全性

安全性关于好代码的判别规范,具有一票否决权。关于这一点,咱们平常能够堆集,避开以下一些雷区外,有时刻能够看一些常用结构,中心淫荡熟女件的源码,如rocketMq,sring,jdk源码等,学习里边一些写法,以及避开或许的坑。

Object 的 equals 办法简单抛空指针反常,应运用常量或确认有值的目标来调用 equals

正例: "test".equals(object);

反例:object.equals("test");

阐明:引荐运用 java.util.Objects#equals甘草片的成效与效果,什么样的代码是好代码?读阿里JAVA开发手册有感而发,国际名表排行榜(JDK7 引进的东西类)

引荐指数:五星。

ArrayList的subList成果不行强转成ArrayList,否则会抛出ClassCastEx和女上司ception 反常,即 java.util.RandomAccessSubList cannot b笑三笑是怎么得到龙龟e cast to java.util.ArrayList

理由:subList 回来的是 ArrayList 的内部类 SubList,并不是 ArrayList 而是 ArrayList 的一个视图,关于 SubList 子列表的一切操作最终会反映到原列表上

引荐指数:五星。

用户恳求传入的任何参数有必要做有效性验证。

阐明:疏忽参数校验或许导致:

  • page size 过大导致内存溢出
  • 歹意 order by 导致数据库慢查询
  • 恣意重定向
  • SQL 注入
  • 反序列化注入
  • 正则输入源串拒绝服务 ReDoS

阐明:Java 代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题, 可是假如进犯人员运用的是特别结构的字符串来验证,有或许导致死循环的成果。

引荐指数:五星。

慎用无界行列线程池,甘草片的成效与效果,什么样的代码是好代码?读阿里JAVA开发手册有感而发,国际名表排行榜如newFixedThreadPool线程池导致的内存飙升。

阐明:newFixedThreadPool线程池或许导致的内存飙升问题,是因为它运用了无界行列。所以这些点需求咱们堆集以及看一下常用类的源码,如线程池,AQS等等。

引荐指数:三星。

总结

所以具有以下几点特性的代码,便是好代码

  • 好的命名
  • 明晰的结构
  • 高雅的格局
  • 功用好,效率高
  • 安全安稳

平常咱们能够多点堆集,看书,看源码,着这儿给咱们引荐几本书

  • 阿里巴巴Java开发书册》
  • 《重构 改进既有代码的规划》
  • 《Spring源码深度解析》
  • 《HeadFirst规划形式》

最终,我自己是一名从事了多年开发的Java老程序员,辞去职务现在在做自己的Java私家定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Java学习干货,能够送给每一位喜爱Java的小伙伴,想要获取的能够重视我的头条号并在后台私信我:0爱你是最好的韶光1,即可免费获取。