七::泛型和反射
93,java的泛型是类型擦除的
94,不能初始化泛型参数和数组
95,强制声明泛型的实际类型
96,不同场景使用不同的泛型通配符
97,警惕泛型是不能协变和逆变的
98,建议采用的顺序是List<T>,List<?>,List<Object>
99,严格限定泛型类型采用多重界限
100,数组的真实类型必须是泛型类型的子类型
101,注意Class类的特殊性
102,适时选择getDeclaredXXX和getXXX
103,反射访问属性或方法时将Accessible设置为true
104,使用forName动态加载类文件
105,动态加载不适合数组
106,动态代理可以使代理模式更加灵活
107,使用反射增加装饰模式的普适性
108,反射让模版方法模式更强大
109,不需要太多关注反射效率
八::异常
110,提倡异常封装
111,采用异常莲传递异常
112,受检异常尽可能转化为非受检异常
113,不要在finally块中处理返回值
114,不要在构造函数中抛出异常
115,使用Throwable获得栈信息
116,异常只为异常服务
117,多使用异常,把性能问题放一边
九,多线程和并发
118,不推荐覆写start方法
119,启动线程前stop方法是不可靠的
120,不使用stop方法停止线程
121,线程优先级只使用三个等级
122,使用线程异常处理器提升系统可靠性
123,volatile不能保证数据同步
124,异步运算考虑使用Callable接口
125,优先选择线程池
126,适时选择不同的线程池来实现
127,Lock与synchronized是不一样的
128,预防线程死锁
129,适当设置阻塞队列长度
130,使用CountDownLatch协调子线程
131,CyclicBarrier让多线程齐步走
十::性能和效率
132,提升Java性能的基本方法
133,若非必要,不要克隆对象
134,推荐使用望闻问切的方式诊断性能
135,必须定义性能衡量标准
136,枪打出头鸟——解决首要系统性能问题
137,调整Jvm参数以提升性能
138,性能是个大咕咚
十一,开源世界
139,大胆采用开源工具
140,推荐使用Guava扩展工具包
141,Apache扩展包
142,推荐使用Joda日期时间扩展包
143,可以选择多种Collections扩展
十二::思想为源
144,提倡良好的代码风格
145,不要完全依靠单元测试来发现问题
146,让注释正确,清晰,简洁
147,让接口的职责保持单一
148,增强类的可替换性
149,依赖抽象而不是实现
150,抛弃7条不良的编码习惯
151,以技术员自律而不是工人