Effective Java2读书笔记-创建和销毁对象(二)
第3条:用私有构造器或者枚举类型强化Singleton属性
这一条,总体来说,就是讲了一个小技巧,将构造器声明为private,可以实现单例。具体有以下几种实现的方式。
①最传统的单例实现模式,可能有很多变种,核心思想是私有化构造器。
public class Singleton {
    private static final Singleton INSTANCE = new Singleton();
    private Singleton(){};
    public static Singleton getInstance(){
        return INSTANCE;
    }
    public static void main(String[] args) {
        Singleton.getInstance();
    }
}
②用枚举类型实现,更加简洁,无偿提供序列化机制,能够绝对防止多次实例化(方法①如果使用序列化仍可生成多个实例),即使是面对复杂的序列化或者反射攻击的时候。虽然这种方法还没有广泛采用,但是单元素的枚举类型已经成为实现Singleton的最佳方法。
public enum Singleton {
    INSTANCE;
    private String s;
    public String getS() {
        return s;
    }
    public void setS(String s) {
        this.s = s;
    }
}
其实enum反编译出来本质上仍然是一个类,也可以有自己的属性和方法。
第4条:用私有构造器强化不可实例化的能力
这里其实也讲的是一个小技巧。比如说,我们平时经常写工具类,工具类不希望被实例化,实例化对它没有任何意义。
第一种解决方案是将工具类做成抽象类,但是这样还是不行,因为这样子类继承后仍然可以实例化。
因此,当一个类不需要被继承也不需要被实例化时,只要让这个类的构造器私有化,就可以达到这个效果。
public class Util {
    //私有化构造函数,迫使不能实例化
    private Util(){};
    public static String getStrOfObject(Object o){
        //将Object转换为String的方法,略
        return "";
    }
    public static String parseDateToYYYYMMDD(Date d){
        //将Date转换为2016-03-05这种格式的方法,略
        return "";
    }
}
Effective Java2读书笔记-创建和销毁对象(二)的更多相关文章
- Effective Java2读书笔记-创建和销毁对象(三)
		
第5条:避免创建不必要的对象 本条主要讲的是一些反面教材,希望大家引以为鉴. ①无意中使用自动装箱导致多创建对象. public class Sum { public static void main ...
 - Effective Java2读书笔记-创建和销毁对象(一)
		
第1条:考虑用静态工厂方法代替构造器 通常情况下,我们创建一个对象采取new的形式,但是还有一种方法也是经常使用到的,它的名称叫做静态工厂方法. 例如,java中基本类型boolean的包装类Bool ...
 - Effective Java2读书笔记-创建和销毁对象(四)
		
第7条:避免使用终结方法 这一条讲的简直是不知所云.先简单记下来其中说出的几条: ①显式终止方法的典型例子有InputStream.OutputStream和java.sql.Connection上的 ...
 - Effective Java读书笔记--创建和销毁对象
		
1.优先考虑用静态工厂方法代替构造器2.遇到多个构造器参数时要考虑使用构建器Builder解决参数过多,不可变类型.私有构造方法,静态类的构造方法提供必要参数,剩下可选.new xxx.build() ...
 - Effective Java学习笔记--创建和销毁对象
		
创建和销毁对象 一.静态工厂方法代替构造器 静态工厂方法的优缺点 优点: 1.可以自定义名称(可以将功能表述的更加清晰) 2.不必每次调用都创建新的对象(同一对象重复使用) 3.返回的类型可以是原返回 ...
 - Effective Java2读书笔记-类和接口(二)
		
第15条:使可变性最小化 通过一个复数类来看不可变类. public final class Complex { private final double re; private final doub ...
 - [Effective Java]第二章 创建和销毁对象
		
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
 - Effective Java2读书笔记-对于所有对象都通用的方法(二)
		
第10条:始终要覆盖toString 这一条没什么好讲的,就是说默认的toString方法打印出来的是类名+@+十六进制哈希码的值.我们应该覆盖它,使它能够展示出一些更为详细清晰的信息,这个看实际情况 ...
 - Effective Java2读书笔记-对于所有对象都通用的方法(一)
		
第8条:覆盖equals时请遵守通用约定 ①约定的内容 自反性.对于任何非null的引用值x.x.equals(x)必须返回true. 对称性.对于任何非null的引用值x和y.当且仅当y.equal ...
 
随机推荐
- 163k地方门户网站系统团购定时结束限量控制
			
#coding=utf8 #!/usr/bin/env python # 网站自动审核系统 import pymssql import re import sys import datetime im ...
 - OpenSceneGraph是一个开源的三维引擎
			
http://www.osgchina.org/OpenSceneGraph是一个开源的三维引擎,被广泛的应用在可视化仿真.游戏.虚拟现实.科学计算.三维重建.地理信息.太空探索.石油矿产等领域.OS ...
 - Qt Creator快捷键大全,附快捷键配置方法
			
一.快捷键配置方法: 进入“工具->选项->环境->键盘”即可配置快捷键. 二.常用默认快捷键: 编号 快捷键 功能 1 Esc 切换到代码编辑状态 2 F1 查看帮助( ...
 - 【转】android TV CTS 4.0.3_r1测试
			
原文网址:http://blog.sina.com.cn/s/blog_539ad34301012764.html 做CTS测试已经一月有余,经过不断的摸索,现总结经验,与大家分享. 一.Downlo ...
 - vi命令笔记
			
vim编辑器 文本编辑器,字处理器ASCII nano, sed vi: Visual Interfacevim: VI iMproved 全屏编辑器,模式化编辑器 vim模式:编辑模式(命令模式)输 ...
 - UITableView使用总结和性能优化
			
UITableView使用总结和性能优化 UITableView有两种风格:UITableViewStylePlain和UITableViewStyleGrouped.如 果我们查看UITabl ...
 - python学习之路-13
			
SQLAlchemy ORM框架 连表操作 一对多 创建表 指定约束 ForeignKey from sqlalchemy import create_engine from sqlalchemy.e ...
 - Jpeg(模拟)
			
Jpeg Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
 - 2014 (多校)1011 ZCC Loves Codefires
			
自从做了多校,整个人都不好了,老是被高中生就算了,题老是都不懂=-=原谅我是个菜鸟,原谅我智力不行.唯一的水题. Problem Description Though ZCC has many Fan ...
 - Android应用程序资源的编译和打包过程分析
			
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8744683 我们知道,在一个APK文件中,除了 ...