未编译的java类但仍然执行

时间:2015-03-12 18:27:40

标签: java compilation

我在我的一个java程序中有以下代码。

public class Solution {

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

    public static void printOutput(String[] arr){

        //Note: The semi colon is omitted intentionally.
        System.out.print("Hello Incomplete World")
}

当我构建它时,我收到编译错误,但仍会生成.class文件。当我运行.class文件时,它会输出“Hello World”。

这怎么可能?我一直认为具有未解决的编译问题的.class文件永远不会是可执行文件。任何人都可以提供一些信息吗?

3 个答案:

答案 0 :(得分:1)

这里可能发生的是已成功编译的类文件已存在。当Java编译器运行时,如果成功编译源文件,它将生成.class文件,但不会删除后续编译失败。

答案 1 :(得分:1)

您假设编译器会清除您的旧类文件 - 它没有。

检查当前.class文件的修改日期 - 您会发现它比您的编辑时间更早。这是因为它是从工作代码生成的,而不是从您当前的源文件生成的。如果删除此类文件,然后尝试重新编译,您将看到未创建新的类文件。

答案 2 :(得分:0)

您正在运行的类文件来自之前的编译。再次编译程序并查看以前修改类文件的时间。