【问题标题】:Java: automatically creating a .class file for each classJava:为每个类自动创建一个 .class 文件
【发布时间】:2014-02-18 23:55:44
【问题描述】:

假设我有一个 A.java,在同一个文件中包含两个类(一个公共的和一个私有的)。

public class A{
    public static void main(string[] args){
        ...
    }
}

class B{
    ...
}

为什么Java在编译A.java的时候会自动创建一个A.class和一个B.class?

是为了避免这类问题吗? https://stackoverflow.com/a/2336762/2034015

如果 Foo.java 引用 Baz 而不是 Bar 会发生什么,我们尝试 编译Foo.java?编译失败并出现如下错误:

Foo.java:2: 找不到符号 symbol : class Baz location: class Foo 私人巴兹巴兹; ^ 1 个错误

另外,我知道使用 Java 的正确方法是每个类一个文件,但我想知道 Java 为什么要这样做。

【问题讨论】:

  • java 这样做是因为它是每个类的一个类文件,而不管它们的公共/私有属性如何。内部类被称为outer$inner,匿名类被称为outer$number
  • 同意,每个文件一个类。内部类获得 $ 语法,并且需要先实例化前面类的实例,然后才能实例化 $ 后面的类型之一。 (内部类需要引用包含类型)
  • 这就是 javac 的作用。有两个类,因此有两个类文件。

标签: java


【解决方案1】:

Java 的工作原理是从您的源代码生成的 .class 文件。每个文件只能有一个公共类,但许多其他类(包括内部/匿名/静态等 - 内部类在名称中具有 $ 前面是外部类,匿名在 $ 之后只有数字)在一个文件中并且仍然它将被编译成更多的类。所以关系是source file : byte-code file - 1 : n

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多