Java public class 与 缺省 class 完整详解
·
Java public class 与 缺省class 完整详解
一、访问修饰符基础
Java 类的访问权限分两种场景:
- public:公共访问修饰符
- 无修饰符(直接写 class):默认包访问权限(包私有)
二、语法文件规则(硬性编译规则,错了直接报错)
1. public class 强制约束
- 一个
.java源文件最多只能存在一个 public class; - public 修饰的类名,必须与当前.java文件名完全一致(大小写敏感);
例:文件Student.java,里面只能写public class Student,public class Test直接编译报错; - 不能一个文件写两个 public class,直接编译失败。
正确示例 Student.java
// 类名和文件名完全匹配
public class Student {
}
// 允许存在多个无public普通类
class Teacher {}
class School {}
错误示例1(文件名不匹配)
文件名为 Test.java
public class Demo {} // 编译报错,public类名必须是Test
错误示例2(多个public类)
public class A {}
public class B {} // 编译报错,一个文件不能两个public class
2. 无修饰 class(普通类)无文件名限制
- 同一个java文件可以定义任意多个普通class;
- 类名和java文件名不需要一致,无强制绑定;
- 没有数量限制,全部不用public即可。
示例 Demo.java
class Cat {}
class Dog {}
class Bird {}
代码完全合法,可正常编译生成3个class文件。
三、编译后class文件生成规则
Java编译时,每个独立类都会生成单独 .class 字节码文件
- 有
public class Student→ 生成Student.class - 文件内其他普通类
Teacher→ 生成Teacher.class
如上 Student.java 编译后会产出:Student.class、Teacher.class、School.class 三个文件。
四、核心访问权限区别(最重要)
1. public class(公共类)
权限:任何包、任何位置都能访问、实例化
- 同包其他类:可以使用
- 不同包其他类:import导入后即可使用
适用:项目对外暴露的工具类、实体类、主程序入口类。
2. 无修饰 class(包访问权限)
权限:仅同一个包(package)内的类可以访问
- 同包类:正常调用、创建对象
- 其他包类:即便import导入,也无法使用,编译报错
适用:仅当前包内部使用的辅助工具类、临时内部类。
权限对比表格
| 类型 | 同包访问 | 跨包访问 | 单文件数量上限 | 类名与文件名 |
|---|---|---|---|---|
| public class | 允许 | 允许 | 最多1个 | 必须完全相同 |
| 缺省class | 允许 | 禁止 | 无限制 | 无要求 |
五、main 主方法存放规范
程序入口 public static void main(String[] args) 运行规则:
- main方法所在类如果是 public class,直接
java 类名运行; - main方法写在普通无public类中,运行时也能执行,但开发规范不推荐;
- 行业标准:程序启动类统一使用
public class,单独一个文件存放。
示例 Main.java
public class Main {
// 程序入口
public static void main(String[] args) {
System.out.println("程序运行");
}
}
六、开发场景使用建议
- 对外提供功能的类 → 使用 public class,单独一个文件,方便其他包调用;
- 仅当前包内部辅助、不对外暴露 → 写在同文件内,使用无public class;
- 业务实体、工具类、控制器统一public;
- 测试临时小类、工具辅助类,可作为同文件普通class,简化文件数量;
- 大型项目禁止一个文件写大量类,遵循一个文件一个public类规范。
七、补充易错点
- 只有顶层类才有 public / 缺省区分,方法内部写的内部类不受该文件名规则限制;
- 权限只作用于类本身,类内部的方法、变量访问修饰符不受此规则影响;
- 缺省权限没有关键字,不是 private/protected,专属名称:包访问权限。
更多推荐
所有评论(0)