Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 终端未覆盖.class文件_Java_Terminal_.class File - Fatal编程技术网

Java 终端未覆盖.class文件

Java 终端未覆盖.class文件,java,terminal,.class-file,Java,Terminal,.class File,我现在正在上java编程课,这是我第一次真正的编程经验(尽管我以前做过一些编程)。对于这个类,我必须使用jEdit来编写程序,使用terminal来编译和运行它们(我有一个mac,出于教育目的,自动编译、运行和调试程序的程序是被禁止的)。起初,我的工作进展得很顺利,但几天前,当我试图编译快速排序程序时,终端停止覆盖该程序中的.class文件。我更改代码,使其在运行时看起来完全不同,但在编译并运行之后,没有任何更改。但是,如果我在重新编译之前删除了.class文件,那么这些更改将在下次运行它时实现

我现在正在上java编程课,这是我第一次真正的编程经验(尽管我以前做过一些编程)。对于这个类,我必须使用jEdit来编写程序,使用terminal来编译和运行它们(我有一个mac,出于教育目的,自动编译、运行和调试程序的程序是被禁止的)。起初,我的工作进展得很顺利,但几天前,当我试图编译快速排序程序时,终端停止覆盖该程序中的.class文件。我更改代码,使其在运行时看起来完全不同,但在编译并运行之后,没有任何更改。但是,如果我在重新编译之前删除了.class文件,那么这些更改将在下次运行它时实现。我和我的老师都找不到关于这个问题的任何信息,也找不到如何解决这个问题的信息(在我遇到这个问题的三天前,我的一个同学也遇到了同样的事情,我们是班上唯一的mac用户)。如果有人知道问题是什么,如何解决,或者我在哪里能找到知道如何解决的人,我会非常感激。每次编译我的程序时删除五个.class文件是一件非常痛苦的事情,已经给我带来了一些严重的问题。非常感谢你的帮助


*编辑:我正在运行mac os x 10.8.5

编译器在检测哪些类文件过期方面不够聪明,因此要么手动告诉它使用
javac*.java
重新编译所有内容,要么使用诸如


编译器不重新编译所有类的原因是,它试图通过只重新编译已更改的文件来“智能”并避免不必要的工作。如果
.class
文件比匹配的
.java
文件新,则源代码自上次编译以来没有更改,因此不会重新编译该类

当有多个文件具有一系列依赖项时,这可能会导致问题。考虑这个简单的例子:

// file: A.java
public class A { public static void main(String[] args) { new B().run(); } }

// file: B.java
public class B { void run() { new C().run(); } }

// file: C.java
public class C { void run() { System.out.println("hello world"); } }
当第一次编译
A
时,编译器看到它引用
B
,而B又引用
C
。所有三个都已编译,并且都很好

如果修改了
B.java
,并且重新编译了
A
,编译器会看到
A
引用了
B
,并且因为
B.java
B.class
新,所以会重新编译。它不会重新编译
C
,因为
C.java
没有更改。一切都很好


但是,如果修改了
C.java
,并且重新编译了
A
,编译器会发现
A
依赖于
B
,但由于
B.java
没有更改,因此不会重新编译。因此,即使
C.java
发生了更改,编译器也不会重新编译
C

编译器在检测哪些类文件过期方面不够聪明,因此要么手动告诉它使用
javac*.java
重新编译所有内容,要么使用诸如


编译器不重新编译所有类的原因是,它试图通过只重新编译已更改的文件来“智能”并避免不必要的工作。如果
.class
文件比匹配的
.java
文件新,则源代码自上次编译以来没有更改,因此不会重新编译该类

当有多个文件具有一系列依赖项时,这可能会导致问题。考虑这个简单的例子:

// file: A.java
public class A { public static void main(String[] args) { new B().run(); } }

// file: B.java
public class B { void run() { new C().run(); } }

// file: C.java
public class C { void run() { System.out.println("hello world"); } }
当第一次编译
A
时,编译器看到它引用
B
,而B又引用
C
。所有三个都已编译,并且都很好

如果修改了
B.java
,并且重新编译了
A
,编译器会看到
A
引用了
B
,并且因为
B.java
B.class
新,所以会重新编译。它不会重新编译
C
,因为
C.java
没有更改。一切都很好


但是,如果修改了
C.java
,并且重新编译了
A
,编译器会发现
A
依赖于
B
,但由于
B.java
没有更改,因此不会重新编译。因此,即使
C.java
发生了变化,编译器也永远不会到达
C
,也不会重新编译它。

请您至少列出您执行的命令,并提供源(和/或目标)目录的简要概述,好吗。。。当你希望别人读你写的东西时,最好努力让他们更容易阅读。文字墙会让许多潜在的回答者望而却步。我使用这些命令。RandomArray类只是一个测试类,它创建一个随机数组,然后调用排序程序本身。编译该类确实编译了所有必要的类(至少,在这个问题出现之前是这样):“cd desktop/programs/multisorter”和“javac RandomArray.java”您能不能至少列出您执行的命令,并提供源(和/或目标)目录的简要概述。。。当你希望别人读你写的东西时,最好努力让他们更容易阅读。文字墙会让许多潜在的回答者望而却步。我使用这些命令。RandomArray类只是一个测试类,它创建一个随机数组,然后调用排序程序本身。编译该类确实编译了所有必要的类(至少,在这个问题出现之前是这样):“cd desktop/programs/multisorter”和“javac RandomArray.java”非常感谢!你让我的生活轻松多了!非常感谢你!你让我的生活轻松多了!