zoukankan      html  css  js  c++  java
  • [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。

  • 相关阅读:
    与WinRT组件进行操作
    clr via c# 运行时序列化
    clr via c# 程序集加载和反射(2)
    clr via c# 程序集加载和反射集(一)
    clr via c# clr寄宿和AppDomain (一)
    cir from c# 托管堆和垃圾回收
    浏览器页面的生命周期
    C#常用泛型集合
    Params修饰符
    ASP.net应用程序的生命周期
  • 原文地址:https://www.cnblogs.com/hamhog/p/3537576.html
Copyright © 2011-2022 走看看