1. 引言
在 Java 中,public class 和 class 是定义类时的两种常见写法。很多初学者在编写代码时,会疑惑为什么有的类前面要加 public,有的则不加。本文将从访问权限、文件命名规则、编译方式等角度,详细讲解两者的区别。
2. 基本概念
public 是 Java 的访问修饰符之一,用于控制类、方法、字段的可见范围。当 public 修饰类时,表示该类对所有类可见,可以被任意包中的类访问。
而 class 是 Java 中声明类的关键字,单独使用 class 声明类时,该类具有默认访问权限(包级私有),即只能被同一个包中的类访问。
3. 核心区别
两者的主要区别体现在以下几个方面:
- 访问权限不同 :
public class可以被任何包中的类访问;class只能被同一包中的类访问。 - 文件命名规则不同 :一个 Java 源文件中最多只能有一个
public class,且该类的名称必须与文件名完全一致;而class声明的类没有此限制。 - 数量限制不同 :一个源文件中可以有多个
class声明的类,但只能有一个public class。 - 编译产物不同 :每个类都会生成独立的
.class字节码文件,与是否使用public无关。
4. 代码示例
下面通过一个示例来直观展示两者的区别。假设文件名为 Main.java:
java
// Main.java
public class Main {
public static void main(String[] args) {
System.out.println("这是 public class");
Helper helper = new Helper();
helper.show();
}
}
class Helper {
void show() {
System.out.println("这是默认访问权限的 class");
}
}
在上述代码中,Main 是 public class,必须与文件名一致;Helper 是默认访问权限的类,只能在同一包内使用。
5. 常见问题
在实际开发中,初学者常会遇到以下问题:
- 文件名与 public class 不一致:编译时会报错,提示类名与文件名不匹配。
- 多个 public class 共存 :一个源文件中不能出现两个
public class,否则编译失败。 - 跨包访问 :如果需要在其他包中访问某个类,必须将该类声明为
public。
6. 总结
简单来说,public class 和 class 的核心区别在于访问权限和文件命名约束。如果类需要被其他包访问,或者作为程序入口(包含 main 方法),必须使用 public class;如果类仅在当前包内部使用,使用 class 即可。