Java 静态导入和类文件生成
如果我们对类使用静态导入,编译器在编译实际类时会为静态导入的类生成类文件吗 例:Java 静态导入和类文件生成,java,Java,如果我们对类使用静态导入,编译器在编译实际类时会为静态导入的类生成类文件吗 例: 当编译器编译类A时,它是否也会为B生成类文件?否,import语句不会导致编译器生成任何内容。想一想:若并没有源代码,编译器如何生成类?编译器根据定义将源代码翻译成可执行代码(对于java来说是字节码) 顺便说一句,示例中静态导入的语法不正确。在静态导入中不应使用(): 导入静态com.x.y.util.B.getIds当您在类中使用某些类型时,请使用关键字导入或仅按全名导入。您必须确保在编译期间,编译器在构建路径
当编译器编译类
A
时,它是否也会为B
生成类文件?否,import语句不会导致编译器生成任何内容。想一想:若并没有源代码,编译器如何生成类?编译器根据定义将源代码翻译成可执行代码(对于java来说是字节码)
顺便说一句,示例中静态导入的语法不正确。在静态导入中不应使用()
:
导入静态com.x.y.util.B.getIds代码>当您在类中使用某些类型时,请使用关键字导入或仅按全名导入。您必须确保在编译期间,编译器在构建路径中具有这两个类
静态导入允许您访问导入类的静态成员。没别的了
class Bar {
public static int getID() {
return -1;
}
}
和静态导入
import static Bar.getID;
class Foo {
private void foo() {
int id = getID(); //instead of Bar.getID();
}
}
这个导入看起来不太好。此外,如果类B
位于A
内,则无需导入它。类文件是为所有类生成的,不管它们是静态的还是非静态的、声明的还是匿名的。我不确定我的问题是否清楚,但不是生成没有源代码的类文件,源代码在那里,但我们应该分别编译类A和类B,然后执行A,还是编译A就足够了。就像匿名内部类一样,编译器生成$1.class。我之所以产生这种怀疑,是因为我们在dev环境中的一个应用程序中,服务器中没有静态导入的类,它工作得很好,但在本地环境中它不工作,我不得不将该类也包括在构建中。是的,感谢您更正语法:)在本例中,答案是肯定的,因为任何其他引用都会导致编译依赖类。但通常您不必关心这一点:任何构建系统都不适合您。
import static Bar.getID;
class Foo {
private void foo() {
int id = getID(); //instead of Bar.getID();
}
}