Java中除私有构造方法外,还有哪些禁止生成类对象的方式?
除了将构造方法设为私有,还有以下几种方式可以阻止外部创建类的实例:
- 使用枚举类
枚举类的构造方法默认是私有的,JVM会保证枚举实例只能是代码中定义的固定对象,外部无法通过new关键字创建新的实例。示例代码:
public enum Person { INSTANCE; public void sayHello() { System.out.println("Hello from Person"); } }
外部只能通过Person.INSTANCE访问预定义的实例,无法自行创建新的Person对象。
- 在私有构造方法中抛出异常
即使通过反射机制强行调用私有构造方法,也会因为构造方法内抛出的异常而无法完成实例化。示例代码:
public class Person { private Person() { throw new UnsupportedOperationException("禁止创建该类的实例"); } }
这种方式可以彻底拦截包括反射在内的所有实例化尝试。
- 抽象类搭配私有构造方法
抽象类本身无法直接实例化,再结合私有构造方法可以阻止子类继承(子类构造方法必须调用父类构造方法,而私有构造无法被子类访问),从而彻底杜绝该类及其子类的实例化。示例代码:
public abstract class Person { private Person() {} public abstract void performAction(); }
外部既不能直接实例化Person,也无法通过继承创建子类并实例化。
内容的提问来源于stack exchange,提问作者harbk
相关产品推荐
相关产品推荐

