时间:2021-05-20
构造器作为Java类的一个特殊的成员同样可以设置关键字来控制其访问权限。在大多数情况下,我们一般把构造器设置为公有成员,即public的,在默认情况下,如果不写任何关键字,其访问权限也是public。这样,在我们新建一个类的对象的时候,构造器会创建对象后被自动调用,发生在其他类成员被设置为默认初始值之后,当然如果有字段初始器和初始化块的话,构造器的调用会发生在此之后。构造器的主要作用是在new将对象的引用返回之前初始化对象。
言归正传,什么叫私有构造器。所谓私有构造器,就是用private关键字声明的构造器,即使用private关键字声明的构造函数。。与一般公有构造器最大的区别在于,其访问权限是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); }}希望本文所述Java编程私有构造器的内容对大家有所帮助!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java构造器使用方法及注意事项超类的构造器在子类的构造器运行之前运行,也就是说,在创建对象时,先运行超类中的构造器,然后再运行子类中的构造器,此时,如果在执行
怎么使用ipodshuffle音乐播放器使用方法怎么使用ipodshuffle音乐播放器使用方法怎么使用ipodshuffle音乐播放器使用方法怎么使用ipod
这篇文章主要介绍了Java继承构造器使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下初始化基类前面
本文以实例形式分析私有构造函数的特点,以及在何种情况下使用私有构造函数。相信对于大家更好的理解C#中的私有构造函数有一定的促进作用。具体如下:一、带私有构造函数
因为构造方法是默认的公有方法(构造方法不要设置成私有的),所以在了的外面可以访问到,这样就可以使用构造方法创建对象,另外构造方法也是类里面的函数,所以可以用构造