初学Java之源文件中的类名约束与编译行为规则

Java 源文件中的类名约束与编译行为规则


1. 多类共存与 .class 文件生成规则

  • 规则
    一个 .java 文件可以定义多个类(public 或非 public),但每个类名必须唯一(包作用域内)。 编译后,每个类生成独立的 .class 文件,文件名与类名严格一致(包括大小写)。
    示例:

    // File: Demo.java
    class A {}        // 生成 A.class
    public class Demo {} // 生成 Demo.class(必须与源文件名一致)
    
  • 注意

    若无 public 类,文件名可自由定义,但类名仍需唯一。


2. public 类的强制约束

  • 规则

    每个 .java 文件仅允许一个 public 类。public 类名必须与源文件名完全一致(包括大小写)。

    示例:

    // File: App.java
    public class App {}   // ✅ 正确
    public class Main {}  // ❌ 错误:类名必须为 App
    

3. 单文件源码启动的特殊行为

  • 规则
    使用单文件启动(如 java Demo.java)时,JVM 默认执行文件中第一个声明且包含有效 main 方法的类。若第一个类无 main 方法,后续类的 main 方法也不会被调用。

正确示例(第一个类有 main 方法)

// File: SingleFileDemo.java
public class SingleFileDemo { // ✅ 类名与文件名一致
    public static void main(String[] args) {
        System.out.println("执行 SingleFileDemo 的 main 方法");
    }
}

class Helper {
    public static void main(String[] args) {
        System.out.println("Helper 类的 main 方法(不会执行)");
    }
}
  • 运行命令

    java SingleFileDemo.java
    
  • 输出结果

    执行 SingleFileDemo 的 main 方法
    
  • 说明
    JVM 仅执行第一个类 SingleFileDemomain 方法,后续类的 main 方法被忽略。

错误示例(第一个类无 main 方法)

// File: WrongOrderDemo.java
class A { // ❌ 第一个类无 main 方法
    public void print() {
        System.out.println("A 类的普通方法");
    }
}

class B {
    public static void main(String[] args) {
        System.out.println("B 类的 main 方法(不会执行)");
    }
}
  • 运行命令
    java WrongOrderDemo.java
    
  • 输出结果
    错误: 在类 A 中找不到 main 方法
    
  • 说明
    JVM 检查第一个类 A 是否包含 main 方法,若无则直接报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值