JAVA开发手册-基础篇-开发规范(二)

名词解释
1.一方库:本工程内部子项目模块依赖的库(jar包)。
2.二方库:公司内部发布到中央仓库,可供公司内部其它应用依赖的库(jar包)。
3.三方库:公司之外的开源库(jar包)。
4.OOP:面向对象编程。
5.静态变量: 类型说明符是static。
6..栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储 区。里面的变量通常是局部变量、函数参数等。
7.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制。
- 静态存储(static storage),这里的“静态”是指“在固定的位置”(尽管也在 RAM 里)。静态存储里存放程序运行时一直存在的数据。你可用关键字 Static 来标识一个对象的特定元素是静态的,但 Java 对象本身从来不会存放在静态存储空间里。
9.常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)。

java开发细节-编程约定(二)

OOP规约

  • 访问一个类的静态变量或者静态方法时,可直接使用类名来访问。如工具类(Constants.vertime).
  • 外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。
  • Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。( eg:”test”.equals(object) )
  • 所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。(避免对堆内存造成浪费)
  • 包装类使用情况:所有的POJO类属性;RPC方法的返回值和参数必须使用包装数据类型;(数据库的查询结果可能是null,因为自动拆箱,用基本数据类型接收有NPE风险)
  • POJO类必须写toString方法。
  • 循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展。(避免造成资源浪费)
  • 工具类不允许有public或default构造方法。

集合处理

有序性是指遍历的结果是按某种比较规则依次排列的。稳定性指集合每次遍历的元素次序是一定的。如:ArrayList是order/unsort;HashMap是unorder/unsort;TreeSet是order/sort。

  • Set集合存储的是不重复的对象。
  • 在subList场景中,高度注意对原集合元素个数的修改,会导致子列表的遍历、增加、删除均产生ConcurrentModificationException 异常。
  • 使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型完全一样的数组,大小就是list.size()。
  • 不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
  • 集合初始化时,指定集合初始值大小。(eg:ArrayList,在每次添加数据都会判断,这个数据是否已经到达临界值,如果到达临界点则会扩容1.5倍。造成效率低,资源浪费)。
  • 使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历.(速率可以快近一倍)。

并发处理

  • 获取单例对象需要保证线程安全,其中的方法也要保证线程安全。
  • 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
  • 高并发时,同步调用应该去考量锁的性能损耗。尽可能使加锁的代码块工作量尽可能的小,避免在锁代码块中调用RPC方法。
  • 对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会造成死锁。
  • 如果每次访问冲突概率小于20%,推荐使用乐观锁,否则使用悲观锁。
  • 避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed 导致的性能下降。
  • volatile解决多线程内存不可见问题。(public volatile boolean iswork = true;)

控制语句

  • 在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。
  • 表达异常的分支时,少用if-else方式,这种方式可以改写成:
if (condition) {
...
return obj;
}
// 接着写else的业务逻辑代码;
  • 如果必须要使用if…else if()…else,不要超过三层。
  • 循环体中的语句要考量性能,如定义对象、变量、获取数据库连接则在循环体外进行。

注释规约
对于注释的要求:第一、能够准确反应设计思想和代码逻辑;第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。好的命名、代码结构是自解释的,注释力求精简准确、表达到位。

  • 类、类属性、类方法的注释必须使用Javadoc规范,使用/*内容/格式。
  • 所有的抽象方法(包括接口中的方法)必须要用Javadoc注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。
  • 所有的类都必须添加创建者和创建日期。
  • 所有的枚举类型字段必须要有注释,说明每个数据项的用途。
  • 代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。
  • 待办事宜(TODO):( 标记人,标记时间,[预计处理时间])

整理与《阿里JAVA开发手册》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值