执行java编译类命令行

执行java编译类命令行,java,command-line,cp,scjp,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. j

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

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/directly

是正确的

C.我认为也是正确的???

D.我们在/foo/com/sun/sjcp/中,只有类文件 包com.sun.sjcp;所以编译器找不到它。 如果文件没有包声明,并且是在此目录中生成的 那么,如果我们尝试以这种方式运行它,它将起作用

E.与D相同-不起作用

给出的唯一答案是B。我哪里出错了?

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


(已编辑):看起来“jvm允许您在要运行的类的完全限定名称中使用正斜杠代替点”(但您只能使用正斜杠)。因此,C似乎也是正确的

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

我尝试从foo执行java com/sun/sjcp/Commander,它能工作吗?在scjp中,我有Commander.class文件。我是confused@Xelian,你说得对,我得到了和你一样的结果。似乎C也是正确的。“jvm允许您在要运行的类的完全限定名称中使用正斜杠代替点”-我在Internet上只找到了这一技巧。