• [Effective Java读书笔记] 第二章 创建和销毁对象(1~7)


    我的技术博客经常被流氓网站恶意爬取转载。请移步原文:http://www.cnblogs.com/hamhog/p/3537576.html,享受整齐的排版、有效的链接、正确的代码缩进、更好的阅读体验。

    第1条:用静态工厂代替构造函数

    1. 形式

    public static Boolean valueOf(boolean b) {
        return b ? Boolean.TRUE : Boolean.FALSE;
    }

    2. 优点:

    • 可以有名称
    • 不一定要创建新对象,可以返回已有的对象
    • 可以返回子类类型的对象(例:java.util.Collections)
    • 让参数化代码变短(例:new HashMap<String,List<String>>() 改为 HashMap.newInstance() )

    3. 缺点:不能子类化,不被IDE工具识别。

    4. 常用名称:valueOf/of ; getInstance(Singleton); newInstance ; getType(不同的类时用); newType

    第2条:构造函数参数很多时用Builder模式

    Hamster hamhog = new Hamster.Builder("hamhog").age(1).height(100).weight(50).build();

    第3条:实现Singleton的最佳方法:枚举类型

    public enum Hamster{
        INSTANCE;
    
        public void haveLunch() { ... }            
    }

    第4条:把所有属性和方法都是静态的类的构造函数设为private

    第5条:避免不必要的new

    1. 用"hamster",不要用new String("hamster") ; 有静态工厂方法就用静态工厂,不用构造函数 ; 优先用int、long等,不要随意用Integer、Long。

    2. 只在初始化创建一次实例的写法:

    class Hamster {
        private static final Calendar lunchTime;
    
        static {
            lunchTime = Calendar.getInstance();
            lunchTime.set( ... )
        }
    }

    第6条:对于自己管理内存的类,要注意及时把过期的对象引用 = null (但平常没必要这样做),防止内存泄漏

    第7条:不要使用finalizer。非要用的话,要记住调用super.finalize。

  • 相关阅读:
    Spark Executor内存管理
    Spring中Bean的生命周期及其扩展点
    NIO非阻塞IO
    TCP,UDP和socket,Http之间联系和区别
    md5加密,md5加盐加密和解密
    线程监测方法多久没被调用
    项目部署后,替换.class文件不生效
    mysql存储过程导入表
    java生成二维码
    Map中keySet和entrySet的区别
  • 原文地址:https://www.cnblogs.com/hamhog/p/3537576.html
Copyright © 2020-2023  润新知