关于java一句话事项

  1. 总是假设最极端的输入和最离奇的错误操作。
  2. 假设用户硬件配置(cpu/内存/硬盘)略低于平均水平。
  3. 文件读写用BufferedInputStream和BufferedOutputStream。
  4. 访问资源用try-with-resource语句。
  5. 读写文件或数据时始终考虑内存不够的情形。
  6. 读写文本文件时,注意字符集。
  7. 字符串与字节转换时,注意字符集。
  8. 读文件时判断结束的条件应是“len > 0”。如果用“len != -1”则在读取零字节时陷入死循环。
  9. 删除/移动/重命名文件前调用“System.gc()”,以免因缓存而失败。
  10. 处理树形信息(例如文件系统)时要避免无限循环:当操作会修改源节点时,目标节点不能是源节点或者其后代。
  11. 若按序号删除列表,则应从后向前删除。
  12. 当类的参数比较多时,不要写很多构造方法来初始化不同参数集,而是用静态方法创建、然后各个set方法返回this,来实现链式赋值。
  13. 匿名类非常适合以下场景:大量重复代码,只有少数方法的实现不同。
  14. 泛型非常适合以下场景:大量重复代码,只有数据类型不同。
  15. 需要大量实例化的类中尽可能少地定义实例变量和实例方法。
  16. 循环里尽可能不执行浮点计算。如果可以,把浮点计算转换为整型计算。
  17. 监听数据变化时,需要判断是否真的发生变化,可以设置最小变化阈值以避免频繁处理。
  18. 若修改JVM参数,或想粗暴清理应用环境时,需要重启应用。
  19. 注意索引参数是基于0(0-based)还是基于1(1-based),尤其是对第三方库。自己写的方法最好注明。一般默认基于0,若是基于1则必须注明。
  20. 一般地,用户界面上的索引起始于1,而代码数据的索引起始于0。
  21. 一般地,用户界面上的范围(开始-结束)包含结束值,而代码数据的范围(开始-结束)不包含结束值。
  22. Double.MIN_VALUE是最小正double(最接近于零的正数)。-Double.MAX_VALUE 是最小double。
  23. 若处理货币,应当用整型保存各个货币单位。
  24. BigDecimal比double慢很多。大多数情况下double的精度够用。
  25. 若是判断数字范围,应当用 if (abs(x - 7.3) < TOLERANCE) 而不是 if (x == 7.3)。
  26. final static常量必须在编译时刻可以确定。
  27. JDBC读取数值时,若数据库值为null,则ResultSet.getDouble/getFloat/getInt/getShort返回0。如果需要区分空值和零,则需用ResultSet.getObject。 ResultSet.html#getDouble
  28. 从Java18开始,Charset.defaultCharset()总是UTF-8。这会影响到ProcessBuilder的命令和结果的解析。 Process JDK-8266075