是否按照规范,给定MyClass.java
文件包含
package com.mycorp.foo;
public class MyClass {
public static void main (String[] args) {
System.out.println("Hello, world!");
}
}
在以下路径中(注意文件夹名称中的点):
./com/mycorp.foo/MyClass.java
以下工作正常:
$ javac com/mycorp.foo/MyClass.java
生产./com/mycorp.foo/MyClass.class
虽然这不起作用:
$ java com.mycorp.foo.MyClass
Exception in thread "main" java.lang.NoClassDefFoundError: com/mycorp/foo/MyClass
Caused by: java.lang.ClassNotFoundException: com.mycorp.foo.MyClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
类文件顶部提到的打包结构与编译关系不大以及更多相关内容运行时类加载.
-
您可以输入任何包名并编译它。例如下面的java类编译
package com.sa.test.me.yes.no;
public class Test{
public static void main(String[] args){
System.out.println("Hello");
}
}
它编译即使你没有放入文件夹结构中与包声明相同。您可以通过不放入任何文件夹来测试它(例如java Test.java
)
2.包的组织在类加载时更为重要。这类加载器总是会搜索类进入基于包结构的文件夹。因此,当您尝试运行程序时,类加载器会尝试根据包结构在文件夹中搜索类文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)