zoukankan      html  css  js  c++  java
  • java私有构造器

    Java私有构造器:使用private关键字声明的构造函数。由于类的构造函数时私有的,所以此类不能被实例化,同时也不能被继承。《Effective Java》第三条:用私有构造器或者枚举强化Singleton属性。所谓Singleton属性是指仅仅被实例化一次的类。第四条:通过私有构造器强化不可实例化的能力。在Java中实现Singleton有两种方式:

    public class Elvis {

        public static final Elvis INSTANCE = new Elvis();
        private Elvis() {}
    }
     
    public class Elvis {
        private static final Elvis INSTANCE = new Elvis();
        private Elvis() {}
        public static Elvis getInstance() { return INSTANCE;}
    }

    方法一:私有构造函数只能被调用一次,用来实例化公有的静态final域Elvis.INSTANCE,一旦Elvis被实例化,只会存在一个Elvis实例(享有特权的客户端可以借助AccessibleObject.setAccessible方法通过反射机制调用私有构造器);

    方法二:使用静态方法getInstance返回对同一个对象的引用,永远不会创建其他Evlis实例;

    为什么需要私有构造器,如果类不能被实例化该怎么使用这个类的方法?

    私有构造器的存在可以让某些类不能被实例化和子类化,这些类通常是一些工具类,例如java.lang.Math等,访问这些类的方法我们可以定义公有的静态方法来实现,如A.methon()

    public class A {

        private A() {}
        public static void methon() {}             
    }
    java.lang.Math中私有构造器的使用,可以看到Math类被定义为final的,使用了private的构造函数,它的方法都是static的,所以调用其方法只需要Math.sin(x)即可:
    public final class Math {
        private Math() {}
        public static final double E = 2.7182818284590452354;
        public static final double PI = 3.14159265358979323846;
         
        public static double sin(double a) {
            return StrictMath.sin(a); // default impl. delegates to StrictMath
        }
         
        public static double cos(double a) {
            return StrictMath.cos(a); // default impl. delegates to StrictMath
        }
     
        public static double tan(double a) {
            return StrictMath.tan(a); // default impl. delegates to StrictMath
        }
     
        ......
     
        public static float scalb(float f, int scaleFactor) {
            return sun.misc.FpUtils.scalb(f, scaleFactor);
        }
    }
     
  • 相关阅读:
    Educational Codeforces Round 47 (Rated for Div. 2) :A. Game Shopping
    Codeforces Round #482 (Div. 2) : Kuro and GCD and XOR and SUM (寻找最大异或值)
    python+locust性能测试(三)之No Web UI模式下运行Locust
    python+locust性能测试(二)之locust深入使用
    python+locust性能测试(一)之locust性能测试入门
    python Mqtt 的安装及使用
    Mysql性能优化(四)--MySQL优化
    uiautomator2+ tesseract 智能识别文字实现手游辅助外挂,打怪刷装备快人一步
    python实用小技之数据结构
    Mysql性能优化(三)--explain返回的结果说明
  • 原文地址:https://www.cnblogs.com/ydbk/p/14213389.html
Copyright © 2011-2022 走看看