文章目录
java 8新特性 demo: https://howtodoinjava.com/java8/predicate-negate-example/
1. Lambda 和 函数式接口
2. 方法引用
3. 接口默认方法和静态方法
Optional 类解决空指针异常
Stream 数据处理
7. 清除过期的对象引用
内存泄漏常见的几个来源:
- 类自己管理内存,警惕内存泄漏问题.
某元素被释放,该元素包含的任何对象引用都清空掉. - 缓存.
对象引用放在缓存中,容易被遗忘,不用的很长一段时间内仍然留在缓存中.
WeakHashMap - 监听器和其它回调.
弱引用(weakreference),例如保存成 WeakHashMap 中的键
9. try-with-resources 优先于 try-finally
以前关闭的时候,需要使用 try-finally,一个还好,需要关闭两个就很蛋疼
private static void customBufferStreamCopy(File source, File target) {
InputStream fis = new FileInputStream(source);
try {
OutputStream fos = new FileOutputStream(target);
try {
... ...
} finally {
fos.close();
}
} finally {
fis.close();
}
}
代码优化后
private static void customBufferStreamCopy(File source, File target) {
try (InputStream fis = new FileInputStream(source);
OutputStream fos = new FileOutputStream(target)){
... ...
} catch (Exception e) {
e.printStackTrace();
}
}
34. 使用枚举代替int常量
有人和我说,枚举太耗性能,占用APK体积??难道枚举比常量更占用用内存??更难用?这些人一看你使用枚举代替int常量,二话不说,批头就来一句“枚举占用内存,不要用”!!!
引贴论战:https://www.zhihu.com/question/48707169,https://stackoverflow.com/questions/320588/interfaces-with-static-fields-in-java-for-sharing-constants
https://stackoverflow.com/questions/29183904/should-i-strictly-avoid-using-enums-on-android
https://www.jianshu.com/p/07dd709b57e5
https://kb.kutu66.com/java/post_1565324
枚举当然是首选,另如果不用枚举,在《Effective Java》一书中,作者建议使用一般类加私有构造方法的方式,至于为什么不用接口,那就要上升到语言哲学问题了。
public class Constants {
private Constants() {}
public static final int AUDIT_STATUS_PASS = 1;
public static final int AUDIT_STATUS_NOT_PASS = 2;
}
枚举单例
枚举 可读性,可用性,类型安全代码
那么可以使用接口来定义常量么?
83. 慎用延迟初始化
资料
https://juejin.im/post/5d5950806fb9a06b0a277412