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();
   }

}