而最好的答案应该是B. C也工作在某些平台上,但不建议,是非常罕见的(至少我在Java编程超过10年的时间里并没有看到它)。
编辑
在Java初学者一个常见的误解是,类名是一样的东西 “MyClass的”。但这并不准确;如被看见在声明class MyClass
命名“MyClass的”是真的,编译器与包声明相结合,创造了Java的指的是作为一个合格的类名,这是所有类名真的是到运行时的程序员提供了方便。 (在C#中,它们为此使用命名空间)。
这在许多情况下,如堆栈跟踪和方法签名,其总是包含,例如,java.lang.String中变得相当明显。因为“String”只是一个解析为java.lang.String的简短形式。你可以通过在你自己的包中创建你自己的字符串来证明这一点......但是要小心这样做会要求你显式地使用java.lang.String或my.package.String,无论是包或类都被导入。
一旦同化的事实,所有的类名是完全合格的,并且该编译器可以帮助您避免繁琐的工作,通过进口来解决短期形式完全合格的形式,事情变得更加清晰。
应该那么明显,为什么:
java命令COM /阳光/测试指挥官
不起作用。 cp选项在类路径中放置目录./com/sun/test(相对于当前目录),但没有名为Commander的类...它是com.sun.test.Commander。这意味着两件事:(a)命令行需要com.sun.test.Commander和(b)为了解决这个类,类路径必须包含一个包含“com”的目录条目,因为一个名为xyMyClass的类必须相对于某些类路径元素,位于x/y中。注:除非您受Sun的雇用,否则您不应将com.sun用作软件包名称,因为域名sun.com属于Sun。这个约定的存在是为了避免类包装和命名冲突。
PPS:有这样的事情作为默认的包,这是通过省略包装声明“指定” - 但它应该几乎从来没有被使用。我已经找到了一个合法的地方是它是希望能够做一个自包含“启动/类加载器”:
java -cp . Launcher com.xxx.yyy.TargetApp
与Launcher.class在当前目录......而这仅仅是因为JAR文件在应用程序运行时保持锁定状态,而类文件不运行,这意味着Launcher.class可以自我更新,而Launcher.jar不能。
为什么不尝试所有这些? – sfussenegger 2010-02-19 07:40:00
你很幸运。显然,有些人为了声望而回答任何事情;) – sfussenegger 2010-02-19 08:01:59
是的,他必须尝试找到解决方案。然而,他可能不明白为什么他们工作或不... – romaintaz 2010-02-19 08:08:00