我有以下问题。给定一个正确编译的类,其源代码为:
1. package com.sun.sjcp;
2.
3. public class Commander {
4. public static void main(String[] args) {
5. // more code here
6. }
7. }
假设类文件位于/foo/com/sun/sjcp/
,当前目录为/foo/
,并且类路径包含“。”。 (当前目录)。哪个命令行正确运行Commander?
A. java Commander
B. java com.sun.sjcp.Commander
C. java com/sun/sjcp/Commander
D. java -cp com.sun.sjcp Commander
E. java -cp com/sun/sjcp Commander
答案:B
一个。我们在根目录中,所以我们无法看到该文件 / foo / com / sun / sjcp /直接
B中。是正确的
℃。我认为也是正确的???
d。我们在/ foo / com / sun / sjcp /并且只有类文件 package package com.sun.sjcp; 因此编译器无法找到它。 如果文件没有包声明并且在此目录中构建 如果我们尝试以这种方式运行它,它将起作用。
电子。与D相同 - 不起作用
唯一给出的答案是B.我在哪里犯了错误?
答案 0 :(得分:3)
C不正确,因为“com / sun / sjcp / Commander”不是有效的类名。文件和类名的路径不一样。
(编辑):似乎“jvm允许你使用正斜杠代替要运行的类的完全限定名称中的点”(但你必须只使用正斜杠)。所以似乎 C 也是正确的
答案 1 :(得分:0)
类名永远不会有正斜杠(它与文件系统路径的概念不同),这就是为什么B是唯一正确的答案。