zoukankan      html  css  js  c++  java
  • 04.使用私有构造器执行非实例化

    前言

    《Effective Java》中文第三版,是一本关于Java基础的书,这本书不止一次有人推荐我看。其中包括我很喜欢的博客园博主五月的仓颉,他曾在自己的博文《给Java程序猿们推荐一些值得一看的好书》中也推荐过。加深自己的记忆,同时向优秀的人看齐,决定在看完每一章之后,都写一篇随笔。如果有写的不对的地方、表述的不清楚的地方、或者其他建议,希望您能够留言指正,谢谢。

    《Effective Java》中文第三版在线阅读链接:https://github.com/sjsdfg/effective-java-3rd-chinese/tree/master/docs/notes

    是什么

    非实例化:不用实例化的类。(实例化没有任何意义,此时这个类我们希望它是非实例化的)

    哪里用

    编写一个工具类的时候。对于工具类,实例化对它们来说是没有任何意义的,然而一个类我们都知道,在没有声明构造方法的时候,编译器会默认提供一个公共的、无参的构造器。

    怎么实现

    /**
     * 不用实例化的工具类
     *
     * @Author GongGuoWei
     * @Email GongGuoWei01@yeah.net
     * @Date 2020/1/11
     */
    public class UtilityClass {
    
        //使用私有构造方法,抑制默认构造函数的不稳定性
        private UtilityClass() {
    
            //AssertionError 避免不小心在类的内部调用构造器
            throw new AssertionError();
        }
    }

    可以看到,我们自己声明了一个构造器(显式构造器),编译器不会默认一个无参的构造器,显式构造器是私有的,所以不可以在类的外部访问它。

    总结

    使用私有构造器执行非实例化,其实主要用在工具类,不用实例化,工具类就可以向调用者提供服务。实例化的过程其实本质是向内存中申请一个空间,我们对于不用实例化的类,避免它使用编译器默认的实例方法,这样节约了内存,也避免了非实例化类的默认构造函数不稳定性。不过这种写法,也有一种缺点,让调用者查看时,会感觉构造器就是设计成不能调用的一样,因此添加一句注释,会是一种明智的选择。

  • 相关阅读:
    添加日志文件
    C库函数对文件的操作
    getpass的使用
    C语言实现 冒泡排序 选择排序 希尔排序
    批量Ping执行Bash脚本
    Script
    echo
    Centos7 pxe
    Rsync 参数
    Ip HostName查询
  • 原文地址:https://www.cnblogs.com/gongguowei01/p/12181311.html
Copyright © 2011-2022 走看看