gpt4 book ai didi

java - 编译从哪里开始?文件顶部? (或)来自包含 main 的类? (或)公开课?

转载 作者:行者123 更新时间:2023-11-29 04:22:25 24 4
gpt4 key购买 nike

我对 .java 文件的编译顺序感到困惑。编译从哪里开始?文件顶部? (或)来自包含 main 的类? (或)公开课?

--- * File Sample1.java *---
class A
{
public static void main(String args[])
{
String str[] = {""};
System.out.println("hi");
B.main(str);
}
}
class B
{
public static void main(String args[])
{
System.out.println("hello");
}
}

我编译“Sample1.java”的假设:
1)代码从顶部开始执行。所以先编译 A 类,然后编译 B 类。

那么我如何考虑下面的代码编译?

--- * File Sample2.java *---
class A extends class B
{
int a;
}
class B
{
int b;
}

除此之外我还有一个问题:

编译器为 A 创建一个默认构造函数,其中调用了它的父类(super class)构造函数(class B),所以这个调用是由编译器放置的还是 JVM 尝试在运行时调用它。

最佳答案

编译从文件的顶部开始,但会经历几个阶段。当编译器第一次读取类时,它只检查它是否可以解析语法,并从中构建一个内部树。在稍后阶段,它将尝试解析符号,然后检查它们是否存在。

您的示例(语法更正 - 您不能说“extends class B”):

class A extends B { 
int a;
}
class B {
int b;
}

工作正常,因为编译器在第一阶段不需要知道类 B 是否存在,当它正在读取类 A 的文本时。在后面的阶段,当编译器试图从 class A extends B 中解析符号 B 时,它查找 B 并且因为它已经读取类 B 的文本,它会找到它并正确编译代码。

关于java - 编译从哪里开始?文件顶部? (或)来自包含 main 的类? (或)公开课?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48294702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com