默认权限成员仅限同包访问:两个类必须声明完全相同的package(字面一致、含大小写与路径),且源文件置于对应目录结构中,同包内可直接访问字段、方法、构造器及实例化默认类。

Java 中默认(包级)访问权限的成员,只能被**同一个包内的其他类**直接访问,不需要任何修饰符(既不是 public、protected,也不是 private)。只要两个类在**完全相同的包声明下**,就能互相调用默认权限的字段、方法和类。
确认是否真正在同包中
包名必须**字面完全一致**,包括大小写和路径结构。常见误区是:目录结构对了但 package 声明写错,或 IDE 自动生成了不同包名。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 两个源文件开头都必须有相同的
package com.example.utils;(不能一个写utils,另一个写example.utils) - 源文件需放在对应目录下:如
package com.example.utils;→ 文件路径应为com/example/utils/ClassA.java - 编译和运行时不要用
-d或 IDE 输出路径打乱包结构
默认权限成员的可访问范围
以下成员若未加任何访问修饰符,在同包内可直接使用:
- 类:可在同包中 new 实例、继承(非 final)、引用类型
-
字段(变量):可直接读写(如
obj.field = 10;) -
方法:可直接调用(如
obj.doWork();) - 构造器:可在同包中 new 对象(除非被 private 修饰)
一个可运行的小例子
假设包名为 myapp:
// myapp/Tool.java
package myapp;
class Tool { // 默认权限类,同包可见
int count = 42; // 默认权限字段
void show() { // 默认权限方法
System.out.println("count = " + count);
}
}
// myapp/Runner.java
package myapp;
class Runner {
public static void main(String[] args) {
Tool t = new Tool(); // ✅ 同包,可实例化默认类
System.out.println(t.count); // ✅ 可访问默认字段
t.show(); // ✅ 可调用默认方法
}
}
常见调用失败原因
- 两个类虽在相同文件夹,但
package声明不同或缺失 → 编译报错“cannot find symbol” - IDE 中一个类被误拖进其他 source root,导致实际编译到不同 classpath 下
- 用了子包(如
myapp.core和myapp)→ 不算同包,无法访问 - 通过反射或外部 jar 引入的类,即使路径看起来一样,也不属于“编译期同包”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










