关于java中package使用的几点问题

 1  package 位于程序的非注释的第一行。例如:

 

// 测试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文件夹 ??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值