java中package语句的歧义性
考虑以下代码:java中package语句的歧义性,java,Java,考虑以下代码: package com.a.b; class Test { public static void main(String[] args) { System.out.println("Hello to the world of packages"); } } 我将程序编译为: javac Test.java 这在当前工作目录中创建了Test.class文件。我现在应该如何运行程序?我试过: java Test 但我得到了一个“找不到类
package com.a.b;
class Test {
public static void main(String[] args) {
System.out.println("Hello to the world of packages");
}
}
我将程序编译为:
javac Test.java
这在当前工作目录中创建了Test.class
文件。我现在应该如何运行程序?我试过:
java Test
但我得到了一个“找不到类def错误”。如果我这样编译:
javac -d . Test.java
它正在创建目录结构,然后我可以运行
java com.a.b.Test
如果我可以在没有目录层次结构的情况下编译,为什么我不能执行?您必须始终使用完全限定的类名运行Java程序: 是否使用
javac-d
选项编译它并不重要
因此,在您的情况下,它将是:
java com.a.b.Test
最好使用-d
选项编译它,并根据包名将.class文件存储在适当的目录结构中
更新
另外,确保当前目录位于类路径中
尝试运行以下命令:
java -cp . com.a.b.Test
更新2
当
-d
选项未与javac
一起使用时,将在当前目录中创建类文件。您必须手动将类文件移动/复制到适当的目录,然后执行它们。-d
选项是实现这一点的捷径。您必须始终使用完全限定的类名运行Java程序:
是否使用javac-d
选项编译它并不重要
因此,在您的情况下,它将是:
java com.a.b.Test
最好使用-d
选项编译它,并根据包名将.class文件存储在适当的目录结构中
更新
另外,确保当前目录位于类路径中
尝试运行以下命令:
java -cp . com.a.b.Test
更新2
当
-d
选项未与javac
一起使用时,将在当前目录中创建类文件。您必须手动将类文件移动/复制到适当的目录,然后执行它们。-d
选项是实现这一点的捷径。Java在类路径中搜索类。默认情况下,classpath
只包含当前目录
当Java搜索类时,它通过classpath
元素进行迭代。若元素是目录,那个么它将在某个子目录中搜索具有类结束扩展名.class
的文件。准确地说,这个子目录是通过在目录分隔simbol(/
或\
中重放点来找到的,具体取决于您的操作系统)和解析结果。Java在类路径中搜索类。默认情况下,classpath
只包含当前目录
当Java搜索类时,它通过classpath
元素进行迭代。若元素是目录,那个么它将在某个子目录中搜索具有类结束扩展名.class
的文件。准确地说,此子目录是通过在目录分隔simbol(/
或\
中重放点来找到的,具体取决于您的操作系统)和解析结果。在您的第一个命令中:
javac Test.java
它编译得很好,因为没有错误,并且将Test.class
文件放在当前目录中,因为那里是Test.java
驻留的地方:
如果未指定-d选项,则javac
将每个类文件放在与生成它的源文件相同的目录中
源文件位于当前目录中,因此类文件位于当前目录中。现在,当您这样执行时:
java Test
出现错误,因为必须使用完全限定类名。您指定了一个包,即使它在当前目录中,也必须使用完全限定名来指定它所在的位置。如果没有全名,Java无法找到它并执行它,因此会出现错误。您可以执行以下操作:
java com.a.b.Test
Java会找到合适的方法,所有的方法都会很好地执行
现在,我建议使用-d
选项来正确放置组织的类文件。我还建议实际创建您指定的包,因此在第一个命令中将Test.java
文件放在/com/a/b
目录中:
javac Test.java
它编译得很好,因为没有错误,并且将Test.class
文件放在当前目录中,因为那里是Test.java
驻留的地方:
如果未指定-d选项,则javac
将每个类文件放在与生成它的源文件相同的目录中
源文件位于当前目录中,因此类文件位于当前目录中。现在,当您这样执行时:
java Test
出现错误,因为必须使用完全限定类名。您指定了一个包,即使它在当前目录中,也必须使用完全限定名来指定它所在的位置。如果没有全名,Java无法找到它并执行它,因此会出现错误。您可以执行以下操作:
java com.a.b.Test
Java会找到合适的方法,所有的方法都会很好地执行
现在,我建议使用-d
选项来正确放置组织的类文件。我还建议实际创建您指定的包,因此将您的Test.java
文件放入目录/com/a/b
1)将您的类添加到java构建路径
2) 使用完整路径运行它。1)将类添加到java构建路径
2) 使用完整路径运行它。提示:所有这些都有很好的文档记录。我知道这样问很方便;希望有人能花时间向你解释,但是,有些事情真的很低级。所以,老实说:把一些精力放在做之前的研究上。你可以从寻找资源、阅读、消化和尝试中学到更多。。。而不是“随时提供答案”