我有以下测试问题:
假设:
1. package com.company.application; 2. 3. public class MainClass { 4. public static void main(String[] args) {} 5. }
并且{app / com / company / application目录中存在
MainClass
。假设CLASSPATH 环境变量设置为“。” (当前目录)。在命令中输入了两个java命令 该行将运行MainClass
? (选择两项。)一个。 java MainClass如果从/ apps目录运行
B. java com.company.application.MainClass如果从/ apps目录运行
C. java -classpath / apps com.company.application.MainClass如果从任何目录运行
D. java -classpath。 MainClass如果从/ apps / com / company / application目录运行
E. java -classpath / apps / com / company / application:。 MainClass如果从/ apps目录运行
F. java com.company.application.MainClass如果从/ apps / com / company / application目录运行
我认为正确的是D和E,但是B和C,我想知道为什么?
答案 0 :(得分:3)
您应该使用其全名执行一个类。类的全名包括:
<package location> + <simple name of class>
考虑到这一点,MainClass
全名为com.company.application.MainClass
。
Java可以从包树中包含顶级目录的目录中找到此类。从示例中,根目录是/apps
:
apps <-- root
+ com <-- here the package starts
+ company
+ application
- MainClass.class
所以这个根目录应该在类路径中,以便Java程序(JVM)可以访问已编译的类和应用程序的入口点。
从问题:
假设CLASSPATH环境变量设置为“。” (当前目录)。
选项B指出:
B中。如果从/ apps目录
运行,则java com.company.application.MainClass
由于您位于/apps
目录中且当前目录是CLASSPATH,因此Java可以找到要执行的指定类。
选项C说明:
℃。
java -classpath /apps com.company.application.MainClass
如果从任何目录运行
在这种情况下,您将/apps
设置为CLASSPATH,因此Java可以找到要执行的指定类。
所有其他选项均无法完成上述说明。
答案 1 :(得分:1)
因为MainClass是com.company.application包的一部分,所以必须这样运行(com.company.application.MainClass)。您不能单独运行MainClass,也不能只使用.MainClass。 要检查自己,请尝试在命令行中运行每个选项!
答案 2 :(得分:0)
一个。 java MainClass如果从/ apps目录运行[java将不会从其类路径中找到该类]
B中。 java com.company.application.MainClass如果从/ apps目录运行[是]
℃。 java -classpath / apps com.company.application.MainClass如果从任何目录运行[是]
d。 java -classpath。 MainClass如果从/ apps / com / company / application目录运行[在执行期间不应该遵循包结构]
电子。 java -classpath / apps / com / company / application:。 MainClass如果从/ apps目录运行[是]
F。 java com.company.application.MainClass如果从/ apps / com / company / application目录运行[无需遵循结构]