1 package 位于程序的非注释的第一行。例如:
package ccnu.rain;
public class test
... {
public static void main(String args [])
...{
System.out.println("OK!");
}
}
2. package ccnu.rain; 表示编译的class文件在ccnu包下的rain包下。
问题: 当你在 java源程序所在目录下编译该java文件,class文件直接生成在该目录下。
例如:以上java程序位于 D盘 temp文件夹下,直接javac,test.class文件生成在temp文件下。
如果你在cmd下 ,运行此java文件,(在temp文件夹下),则会出现错误
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: ccn
u/rain/test)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
为什么?
我的理解是:因为你打包后,类文件在路径ccnu/rain 下,而你在temp下运行,jdk当然找不到class文件。
如果你把新建 ccnu文件夹,在ccnu下新建rain文件夹,然后将class文件拷贝到此文件夹下。
在cmd下(temp文件夹下) java ccnu.rain.test
则运行成功,打印 “OK”
疑问:在编译时,JDK为什么不自动生成ccnu/rain文件夹 ??