我有点困惑...... 我知道类只在需要时才由类加载器加载,即当我们尝试使用静态变量时或者当我们创建该类的实例时。例如,如果我们有例如在我们的程序中有3个类,我们只使用一个,然后只加载那个特定的类而不是其余的,但是当我们运行java编译器时,它会创建3个.class文件,我知道这3个.class文件是字节码文件,但那么这个字节码是什么,加载类和生成类的字节码有什么区别?这个字节码的使用在哪里?如果我们不打算使用特定的类,那么是什么是否需要为该类生成字节码?
答案 0 :(得分:4)
Java是一种编译语言。编译成字节码的目的是允许代码在任何平台上的JVM上运行。平台独立性是java内置的一项功能。 此外,除非它们具有相互依赖性,否则您不必编译所有三个类文件。您可以在console javac命令中指定要编译的特定文件。如果您使用的是IDE,请检查您的设置或从项目中排除不需要的类。
答案 1 :(得分:3)
加载一个类在运行时发生,当您准备调用该类具有的任何属性时。
生成类的字节码在编译时发生。这允许代码在虚拟机上运行。
Java是一种编译语言,它运行在Java虚拟机之上。编译字节码将任何更高级别的代码(无论是Java,Scala还是Clojure)转换为machine-independent instructions以供JVM读取。这就是为什么您的(特定于后端)程序通常在Linux,Windows和Mac OS X上无需修改的情况下运行。
Java语言将编译路径中彼此依赖的任何类,因此如果您有一个类但未使用它,则很可能无法编译它。可能有工具覆盖它,因此如果您发现自己没有使用类,则删除该类以便不生成不必要的字节码。
答案 2 :(得分:1)
C ++和java等语言之间的差异是字节代码。 C ++二进制文件(已编译,汇编,链接)将具有为其编译的OS的机器(op)代码。在java的情况下,字节代码是JVM的目标。字节代码将具有JVM的操作码。反过来,JVM将启动相应的操作系统调用。所以字节码和JVM使java程序独立于os。 Reg加载类加载,它发生在程序需要它时。这是在运行时。 JIT将在需要时进行第二次类编译。
答案 3 :(得分:0)
当我们编译 .java 时,我们会得到 .class 文件。 .class 文件称为字节码。 Java 中的字节代码只不过是一个人类无法理解的 .class 文件,即 (00110011)。这些 .class 文件是在 .java 编译后生成的。 这些 .class 文件可用于在任何平台上运行。