- 不要在常量和变量中出现易混淆的字母
- 不要让常量蜕变成变量
- 三元运算符的类型保持一致
- 不要重载带有变长参数的方法
- 不要让null和空值威胁到变长方法
- 重写变长方法也循规蹈矩
- 小心自增的陷阱
- 不要让旧语法困扰你
- 少用静态导入
- 不要在本类中覆盖静态导入的方法和变量
- 养成良好的习惯,显示声明UID
- 不要用序列化类在构造函数中为不变量赋值
- 不要为final变量复杂赋值
- 使用序列化类的私有方法解决部分属性持久化问题
- 不要忘记break
- 易变业务使用脚本语言编写
- 慎用动态编译
- 避免instanceof非预期结果
- 断言不是鸡肋
- 不要只替换一个类
- 用偶判断,不用奇判断
- 用整数类型处理货币
- 不要让类型默认转换
- 边界,边界,边界
- 不要让四舍五入亏了一方
- 小心包装类型的null值
- 小心包装类型的大小比较
- 优先使用整形池
- 优先选择基本类型
- 不要随便设置随机种子
- 不要在接口中写实现代码
- 静态变量一定要先声明后赋值
- 不要重写静态方法
- 构造函数尽量简化
- 不要在构造函数中初始化其他类
- 使用构造代码块精炼程序
- 构造代码块会想你所想
- 使用静态内部类提高封装性
- 使用匿名类的构造函数
- 匿名类的构造函数很特殊
- 让多重继承成为现实
- 让工具类不可实例化
- 避免对象的浅复制
- 推荐使用序列化实现对象的复制
- 重写equals方法时不要识别不出自己
- equals应该考虑null值情景
- 在equals中使用getClass进行类型判断
- 重写equals方法必须重写hashcode方法
- 推荐重写toString方法
- 使用package-info类为包服务
- 不要主动进行垃圾回收
- 推荐使用String字面量复制
- 注意方法中传递的参数要求
- 正确使用StringBuffer,StringBuilder
- 注意字符串的位置
- 自由选择字符串拼接方法
- 推荐在复杂字符串操作中使用正则
- 建议使用utf编码
- 对字符串排序持一种宽容的态度
- 性能考虑,数组是首选
- 若有必要,使用可变数组
- 小心数组的浅复制
- 在明确的情况下,为集合指定初始容量
- 多种最值算法,适时选择
- 小心基本类型数组转换类表陷阱
- asList方法产生的List对象不可更改
- 不同的列表选择不同的遍历方法
- 频繁的插入和删除使用链表
- 列表相等只需关心元素数据
- 子列表只是原列表的一个视图
- 推荐使用subList处理局部列表
- 生成子列表后不要再操作原列表
- 使用Comparator进行排序
- 不推荐使用binarySearch对列表进行检索
- 集合中的元素必须做到compareTo和equals同步
- 集合运算时使用更优雅的方式
- 使用shuffle打乱列表
- 减少HashMap中元素的数量
- 集合中的哈希码不要重复
- 多线程使用Vector和HashTable
- 非稳定排序推荐使用List
- 集合大家族
- 推荐使用枚举定义常量
- 使用构造函数协助描述枚举项
- 小心switch带来的空值异常
- 在switch的default中添加AssertionError
- 使用valueOf前必须进行校验
- 用枚举实现工厂方法模式更简洁
- 枚举项的数量限制在64个以内
- 小心注解继承
- 枚举和注解结合使用威力更大
- 注意@Override不同版本的区别
- Java的泛型是类型擦出的
- 不能初始化泛型参数和数组
- 强制声明泛型的实际类型
- 不同场景使用不同的泛型通配符
- 小心泛型是不能协变和逆变的
- 建议采用的顺序List<T>,List<?>,List<Object>
- 严格限定泛型类型采用多重界限
- 数组的真实类型必须是泛型类型的子类型
- 注意Class类的特殊性
- 适时选择getDeclaredxxx和getxxx
- 反射访问属性或方法时将Accessible设置为true
- 使用forName动态加载类文件
- 动态加载不适合数组
- 动态代理可以使代理模式更加灵活
- 使用反射增加装饰模式的普适性
- 反射让模板方法模式更强大
- 不要太多关注反射效率
- 提倡异常封装
- 采用异常链传递异常
- 受检异常尽可能转化为非受检异常
- 不要在finally中处理返回值
- 不要在构造函数中抛出异常
- 使用Throwable获得栈信息
- 异常只为异常服务
- 多使用异常,把性能问题放一边
- 不推荐重写start方法
- 启动线程前stop方法是不靠谱的
- 不使用stop方法通知线程
- 线程优先级只使用三个等级
- 使用线程异常处理器提成系统可靠性
- volatile不能保证数据同步
- 异步运算考虑使用Callable接口
- 优先选择线程池
- 适时选择不同的线程池来实现
- Lock和synchronized是不一样的
- 预防线程死锁
- 适当设置阻塞队列长度
- 使用CountDownLatch协调子线程
- CyclicBarrier让多线程齐步走
编写Java代码的100多个建议(总结)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...