java开发手册笔记

OOP规约

  • 所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较

Integer在-128 至 127 范围内因为IntegerCache.cache的原因所以==为true,但是在这个范围之外的都需要使用equals判断,否则出现false

  • 使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无
    内容的检查,否则会有抛 IndexOutOfBoundsException 的风险

  • 循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。

集合处理

  • 如果自定义对象作为Map的键,那么必须重写hashCode和equals,因为String 重写了 hashCode 和 equals 方法,所以我们可以使用 String 对象 作为 key 来使用
  • ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException 异常,正确的使用方法为List<Object> tempList = new ArrayList<Object>(list.subList(2, lists.size()));
  • ArrayList.subList方法返回的只是视图,高度注意对原集合元素的增加或删除,均会导致子列表的遍历、 增加、删除产生ConcurrentModificationException 异常
  • list.toArray()方法分为有参数和无参数两个方法,无参数返回Object[]类,再强转其他类会出现ClassCastException错误
  • list.toArray()最好的方法是定义一个和list数组size大小一样的数组
1
2
3
4
5
List<String> list = new ArrayList<String>(2); 
list.add("guan");
list.add("bao");
String[] array = new String[list.size()];
array = list.toArray(array);
  • 使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常,应为该方法返回的是Arrays类自己定义的一个内部类叫做ArrayList,所以会报错
  • 最好的将Array转为List的方法是Collections.addAll
1
2
3
String[] str = new String[]{"you", "wu"};
List<String> list = new ArrayList<>(str.length);
Collections.addAll(list, str);
  • 不要在 foreach 循环里进行元素的 remove/add 操作,会出现ConcurrentModificationException错误,remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁
1
2
3
4
5
6
7
8
Iterator<String> iterator = list.iterator(); 
while (iterator.hasNext()) {
// list中第一个元素
String item = iterator.next();
if (删除元素的条件) {
iterator.remove();
}
}
  • Map类集合 K/V 能不能存储 null 值的情况

异常处理

  • 不要在 finally 块中使用 return,否则在try块中的return将无法执行到(try块中其他逻辑还是执行的)

MySQL数据库

  • 数据库中保存小数,推荐使用decimal类型(对应java.math.BigDecimal ),禁止使用float和double类型,这两种类型存在精度缺失
  • 不得使用外键与级联,一切外键概念必须在应用层解决

以学生和成绩的关系为例,学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为 级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻 塞,存在数据库更新风暴的风险;外键影响数据库的插入速度

浮点数的使用

  • 在要求绝对精度表示的业务场景下,比如金融行业的货币表示,推荐使用整型存储其最小单位的值,比如人名币用分,美元用美分来表示
  • 要求精确表示小数点N位的业务场景,如圆周率后1000位,那么推荐使用数组保存小数部分的数据
  • 禁止通过判断2个浮点数是否相等来控制业务流程

字符集乱码

为了避免出现源码在不同操作系统中换行显示不同情况,推荐使用LF换行方式

编码不同会造成乱码的现象,国际站推荐使用UTF-8编码

TCP

赏个🍗吧
0%