执行java编译的类命令行

时间:2014-10-16 08:57:17

标签: java command-line cp scjp

我有以下问题。给定一个正确编译的类,其源代码为:

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.我在哪里犯了错误?

2 个答案:

答案 0 :(得分:3)

C不正确,因为“com / sun / sjcp / Commander”不是有效的类名。文件和类名的路径不一样。

(编辑):似乎“jvm允许你使用正斜杠代替要运行的类的完全限定名称中的点”(但你必须只使用正斜杠)。所以似乎 C 也是正确的

答案 1 :(得分:0)

类名永远不会有正斜杠(它与文件系统路径的概念不同),这就是为什么B是唯一正确的答案。