当属于包的类文件时, 那么
package PackageName;
包含在该文件的源代码中。 所以当通过编写
调用jvm时java PackageName.classfilename
它被执行。
是不是“package PackageName”保证了这个类文件属于这个包的jvm? 因为如果我们省略“package PackageName”语句,那么jvm仍然会找到类文件,但是会给出
Exception in thread "main" java.lang.NoClassDefFoundError: Classfilename
wrongname PackageName/ClassfileName
这意味着jvm找到了该文件,但有一些原因认为该类文件的名称错误。
答案 0 :(得分:3)
您的类的包声明必须与您的代码的文件夹结构相匹配。 JVM使用包来处理几个“任务”,从方法的可见性到两个类可以具有相同名称的情况的解决方案。 NoClassDefFoundError实际上意味着JVM 无法使用您提供的包找到该类。如果您在类上省略了包定义,并运行如下程序: java ClassFileName 只要您从类所在的文件夹中运行java命令,JVM就会找到该类。
此外...包名称应全部为小写,类名称应以大写字母开头。 :)当其他人正在阅读您的代码时,约定非常有用!
希望评论有所帮助。
答案 1 :(得分:1)
类文件需要存在于文件系统中,与程序包名称中定义的层次结构相同。如果删除软件包名称,我相信您必须将jar文件的根文件夹中的文件放在“未命名”软件包中。您可能已从源文件中删除了包行,但仍将类定义保留在PackageName
文件夹中。