当前位置: 移动技术网 > IT编程>开发语言>Java > Java私有构造器使用方法示例

Java私有构造器使用方法示例

2019年07月19日  | 移动技术网IT编程  | 我要评论

gamefast,sengka,赵合句

构造器作为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编程私有构造器的内容对大家有所帮助!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网