gpt4 book ai didi

java - 在java中导入的默认类

转载 作者:行者123 更新时间:2023-11-30 10:58:45 26 4
gpt4 key购买 nike

我有一个简单的代码:

public class Hello
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}

我知道 Object 类在每个 java 程序中默认导入,但我想问一下 PrintStream 类是否也默认导入,如果我们使用 print()println() 函数?

因为Object类属于java.lang包,而PrintStream类属于java.io包,所以如果它不是默认导入的,那么我们如何使用 PrintStream 类的 println() 方法呢?

如果默认情况下不导入它(PrintStream 类),那么反编译器为什么要导入它?

这是反编译后的输出: Check this image

最佳答案

Java 程序中的中间表达式类型不需要在源代码级别导入。只有当您将此类表达式的值分配给声明的变量时,您才必须明确其类型;那时你必须添加导入(或使用限定名称)。

在您的例子中,System.out 就是这样一个中间表达式;它的类型确实是 java.io.PrintStream,默认情况下 导入它,因为它不在 java.lang 中。如果您将类(class)修改为

import java.io.PrintStream;
public class Hello {
public static void main(String[] args)
{
PrintStream myOut = System.out;
myOut.println("Hello World");
}
}

您需要添加导入语句,或使用限定名称,如

public class Hello {
public static void main(String[] args)
{
java.io.PrintStream myOut = System.out;
myOut.println("Hello World");
}
}

在字节码层面,情况有所不同:由于 JVM 需要加载所有依赖项才能执行代码,因此所有依赖项都列在 .class 文件中,包括中间表达式的类型。显然,OP 屏幕截图中使用的反编译器不够聪明,无法意识到这种导入在源代码级别是不必要的,因此它只是为 .class 中列出的所有依赖项创建导入语句文件。

关于java - 在java中导入的默认类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32125801/

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