名词解释 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):( 标记人,标记时间,[预计处理时间])就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/06-14/23290877.html