学习oracle认证我正在尝试考试期间可能出现的所有可能情况。 例如,这里有一点关于shell命令行(基于unix)的疑问:
我们假设有一个名为myProject
的文件夹和一个名为myProject/source.
的子文件夹
文件SubFile.java
位于myProject/source
文件夹中,另一个文件File.java
位于myProject
文件夹中。
通过输入以下命令,我会遇到不同的行为:
cd source
(因此,目前我在“myProject / source”上)
javac -sourcepath ../ File.java
//命令../无法访问“文件夹”
然后从File.java
文件夹中编译myProject
并在尝试时返回子文件夹:
javac -classpath ../ SubFile.java
//使用标记-classpath
,它似乎接受../
语法来访问super
文件夹。
你知道它为什么会这样吗?而且有没有机会访问带有super
标志的-sourcepath
文件夹?
答案 0 :(得分:3)
这取决于SubFile
是否也引用File
。
请考虑以下代码:
public class SubFile {
private static File file = new File();
}
假设此文件位于源文件夹中,并假设您位于源文件夹中,则
javac -sourcepath ../ SubFile.java
将SubFile.java
编译到源文件夹中的SubFile.class
,并将File.java
编译到父文件夹中的File.class
。如果这些文件之间没有依赖关系,那么编译器将不编译File.java
(意味着编译器不会自动编译sourcepath
上的所有文件)。
使用-classpath
进行编译时,还会在类路径中搜索源文件,除非明确指定单独的源路径 - 在下列情况下,编译器将抛出错误(假设你之前已经清理了File.class文件:
javac -classpath .. -sourcepath \temp SubFile.java
有关详细信息,另请参阅javac - Java programming language compiler和Differences between classpath and sourcepath options of javac。
这两个链接的重点是:
注意:如果找到了源代码,则可以通过类路径找到的类进行自动重新编译。