`
sdkd_Tiger
  • 浏览: 25088 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编写高质量代码++改善Java程序的151个建议

    博客分类:
  • Java
阅读更多

编写高质量代码,改善Java程序的151个建议,读书笔记!

 

1、判断奇偶数,i%2==0? "偶数","奇数"

2、长整形转化 long ds1 = 1L* 60*8
3、防止边界问题,int类型的最大值为2147482649
4、包装类型要判断是否为null
5、若非必要,不要设置随机数种子 如 Random r = new Random(1000); (X)
6、静态方法不能覆写。通过实例对象访问静态方法或静态属性不是好习惯,应谨慎
7、构造函数尽量简单,避免在构造函数中初始化其它类
8、匿名类ArrayList list = new ArrayList(){}
      形同class Sub extends ArrayList{
              }
     List l2 = new Sub
9、在覆写equals时建议使用getClass进行类型判断,而不要使用instanceof,避免子类钻空子
10、不要主动进行垃圾回收,占用浪费资源
11、Collator类  可以对中文进行排序
12、变长数组扩容  Arrays.copyof(datas,new Length)
13、原始类型数组不能作为Arrays.asList()的输入参数,否则会引起程序逻辑混乱并引起错误
14、Arrays.asList() 返回的是一个长度不可变的列表,不能进行增加和删除操作
        List<String> list = Arrays.asList("张三","李四","王五");
        list.remove("张三"); //会抛异常
15、判断集合是否相等时只须关注元素是否相等即可
16、subList产生的列表只是一个视图,所有的修改动作直接作用于原列表
17、subList生成子列表后,保持原列表的只读状态,不要再操作原列表
18、集合中的元素必须做到compareTo和equals同步
19、并集 list1.addAll(list2)  交集list1.retainAll(list2) 差集list1.removeAll(list2);
        无重复的并集list2.removeAll(list1); list1.addAll(list2);
20、集合排序对于直接量的(8个基本类型、String类型)等,推荐使用TreeSet,
        对于可变量,自定义类等,建议使用List自行排序
21、泛型数组的处理,不能初始化泛型参数和数组
        class Foo<T>{
private T t;
private T[] tArray;
private List<T> list = new ArrayList<T>();
public Foo(){
try {
Class<?> tType = Class.forName("");
t = (T)tType.newInstance();
tArray = (T[])Array.newInstance(tType, 5);
} catch (Exception e) {
e.printStackTrace();
}
}
22、无法从代码中推断出泛型类型的情况下,即可强制声明泛型类型
        static class ArrayUtils{
public static<T> List<T> asList(T...t){
List<T> list = new ArrayList<T>();
Collections.addAll(list, t);
return list;
}
}
        List list5 =ArrayUtils.<Number>asList(1,2,3.1);
        List list4 =ArrayUtils.asList();
23、反射让模板方法更强大,JUnit的实现思想,程序更灵活、更强大
24、不要再finally块中处理返回值
        1)覆盖了try代码块中的return返回值
        public static int doTest(){
int a = 1;
try {
return a;
} catch (Exception e) {
}finally{
a= -1;
}
return 0;
}//始终返回1
        Person p = new Person();
p.setName("张三");
try {
return p;
} catch (Exception e) {
}finally{
p.setName("王五");
}
p.setName("李四");
return p;//始终返回王五
       2)屏蔽了异常
25、在构造函数中尽可能不出现异常。
26、多线程:继承自Thread类的多线程没有必要覆写start()方法
27、线程优先级推荐使用MIN_PRIORITY、NORM_PRIORITY、MAX_PRIORITY三个级别,不建议
        使用其它数字
28、异步计算机及线程调用需返回调用结果时考虑使用Callable接口
29、优秀开源框架Apache,google Guava,Joda
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics