今天早上我正在为我的java认证编写一些练习程序,并注意到我错误地输入了一个包名,所以它与java文件所在的子目录不匹配。我编译了期望出现错误的代码,但编译的所有内容文件 - 甚至没有警告。不要包必须匹配java文件所在的子目录吗?
我搜索了一下,我读的大部分页面都说包名必须与子目录相匹配。我的经验表明情况并非如此。
当我试图运行该程序时,它不起作用,因为.class文件位于错误的目录中。我把它移动到正确的目录,并得到这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sample/directory
/doesnt/even/exist/OtherPackageMemberModifiers (wrong name: com/sample/chap01/O
therPackageMemberModifiers)
所以我觉得我看到的是,Java代码将编译如果包和子目录不匹配,但有如果你这样做似乎不是一种运行代码的方式。那是对的吗?
的现象包路径和目录路径是多余的显示出其讨厌的头。编译器可能会发出错误。但是,这不会是100%:package src.main.java.com.sample ...或package com.sample。 ......仍然不会引发任何错误。 Javac需要基于目录(-d),它基本上是基于文件的。 –