初学者套餐

时间:2011-10-02 13:18:11

标签: java packages

当属于包的类文件时, 那么

package PackageName;

包含在该文件的源代码中。 所以当通过编写

调用jvm时
java PackageName.classfilename

它被执行。

是不是“package PackageName”保证了这个类文件属于这个包的jvm? 因为如果我们省略“package PackageName”语句,那么jvm仍然会找到类文件,但是会给出

Exception in thread "main" java.lang.NoClassDefFoundError: Classfilename 
wrongname PackageName/ClassfileName

这意味着jvm找到了该文件,但有一些原因认为该类文件的名称错误。

2 个答案:

答案 0 :(得分:3)

您的类的包声明必须与您的代码的文件夹结构相匹配。 JVM使用包来处理几个“任务”,从方法的可见性到两个类可以具有相同名称的情况的解决方案。 NoClassDefFoundError实际上意味着JVM 无法使用您提供的包找到该类。如果您在类上省略了包定义,并运行如下程序:     java ClassFileName 只要您从类所在的文件夹中运行java命令,JVM就会找到该类。

此外...包名称应全部为小写,类名称应以大写字母开头。 :)当其他人正在阅读您的代码时,约定非常有用!

希望评论有所帮助。

答案 1 :(得分:1)

类文件需要存在于文件系统中,与程序包名称中定义的层次结构相同。如果删除软件包名称,我相信您必须将jar文件的根文件夹中的文件放在“未命名”软件包中。您可能已从源文件中删除了包行,但仍将类定义保留在PackageName文件夹中。