java构造函数支持public、protected、default和private四种访问控制级别:public允许任意类实例化,protected限同包类及子类调用,default仅同包可访问,private仅类内可用(如单例模式)。

Java 中构造方法的访问权限控制,直接决定了谁可以 new 出这个类的实例。它不是可有可无的细节,而是封装设计的第一道关卡。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
public 构造方法:谁都能创建对象
适合数据载体、工具类等无需限制实例数量的场景。
- 外部任何包、任何类都可调用
new MyClass(...) - 必须确保构造逻辑安全,比如校验参数有效性
- 示例:
public class User { private final String name; private final int age; public User(String name, int age) { if (name == null || age
protected 构造方法:只给子类和同包类留入口
常用于框架基类或模板类,防止被随意实例化,但允许继承扩展。
- 同一包内其他类可直接 new
- 不同包中的子类可在其构造中通过
super(...)调用 - 不同包的非子类无法访问
default(包私有)构造方法:仅限本包内使用
不写修饰符,默认只能被同一包下的类调用。
- 是模块内部协作的常用手段,比如 DAO 层与实体类共包时控制依赖边界
- 外部包即使继承该类也无法调用其构造(因不可见)
private 构造方法:彻底封死 new 路径
用于单例、静态工厂、不可变工具类等强管控场景。
- 类外部无法 new,连反射默认也会失败(需 setAccessible(true) 才能绕过)
- 必须搭配静态方法提供唯一入口,如
getInstance()或of()、create() - 示例:
public class ConfigLoader { private ConfigLoader() {} // 禁止实例化 public static Properties loadFromEnv() { ... } public static Properties loadFromFile(String path) { ... } }
构造方法的访问权限,本质上是在回答一个问题:这个类,应该由谁来负责创建?
选对修饰符,就能让错误在编译期暴露,而不是运行时崩溃。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










