本帖最后由 瞧瞧嗨一波... 于 2017-12-21 17:59 编辑
1 不要在整个类中使用 @SuppressWarnings("unchecked"),尽量缩小使用范围,且需要有注释在其上说明为什么安全!
2 尽量使用委托代替继承,但是如果需要大量的简单委托(即需要大量实例的功能)时,还是用继承;在用委托时,尽量使用委托方法提供间接访问含有实例的方法,满足最小知识原则,如果不得不使用委托,这种情况下就让它直接得到委托对象,从而调用
3 关于synchronized
synchronized就是记住你锁定是什么?是某个对象还是什么,以后如果有人用到你加锁的目标的synchronized,就不行了,因为已经被加锁了,不能再锁。关键有两点:第一点是注意锁定的什么?,如果不是你锁的,就没有约束力; 第二点是约束力仅仅在调用synchronized范围;
同步方法锁定的相对于this,锁定的是当前对象
而你如果同步块,那么就看具体锁定是什么?
Integer i = new Integer(10); 不可以锁
// Integer i=10; 可以锁,因为每次都是同一个对象。
2个同步方法,那么同一个对象,当调用其中一个同步的时候,另外一个同步可以被调用吗?不可以。
4 层次组织常量的方法: 接口组织枚举,静态内部类
5 常量应定义在类中,并且设置构造器为私有从而让其不可实例化;常量接口是种误用,以后如果不需要某个常量还存在实现类里面,所以接口要求有方法最好,光有常量不合适。
6 标签应该仅用于多层嵌套,因为单层循环没有任何意义,跳出或者CONTINUE到外层循环才有意义
7 定义定的时候尽量不要和常用已知的类,例如JAVA.LANG同名,那样容易冲突也不好用。
8 使用private构造器,确保工具类不能被实例化或者继承
9 关闭流时,关闭最后一个外层流即可,其他自动关闭。
10 TimeUnit.MILLISECONDS.sleep(100) 新的sleep方式
11 添加新方法时,先添加接口中的方法,这样就不会老是忘记加了...
12 当在eclipse中new一个对象,没有提示时,因为这个对象的构造器不可见。
13 异常只能用于错误处理,不应该用来控制程序流程。
14 F2修复(或者Ctrl+1),F3进入 F4 显示Outline和继承结构(alt+t)
15 尽量指定类的final修饰符
■带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。
另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。
16
类间关系有很多种,在大的类别上可以分为两种:纵向关系(泛化与实现)、横向关系(依赖,关联,聚合,组合)。
纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。
横向关系较为微妙,按照UML的建议大体上可以分为四种:
1.依赖(Dependency)
2.关联(Association)
3.聚合(Aggregation)
4.组合(Composition
17 不要返回NULL,代替以特例或异常,不要传递NULL,实现检查是否是NULL并包装为非法参数异常等合适处理。
18 接口可以用来定义期待,从而提前完成工作,但是定义的接口可能不适合期待的接口形式,例如未来定义的接口可能多点方法,那么适配器模式可以用于此地,一句话:接口定义期待方法,如果不完全符合期待,则可以用适配器适配。
19 函数返回应该是个接口最佳,比如返回ARRAYLIST返回为LIST或者COLLECTION更佳
20 用到的函数应该在第一次用到紧随其后
21 使用通配符导入更佳。
22 遇到选择子当作参数时,例如BOOLEAN,考虑参考函数。 |
|