我今天早上为我的java认证编写了一些练习程序,并注意到我输错了包名,所以它与java文件所在的子目录不匹配.我编译代码期待错误,但所有编译文件 - - 甚至没有警告.
我google了一下,我读到的大多数页面都说包名必须与子目录相匹配.我的经验表明情况并非如此.
当我尝试运行该程序时,它不起作用,因为.class文件位于错误的目录中.我将它移动到正确的目录,并得到此错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sample/directory
/doesnt/even/exist/OtherPackageMemberModifiers (wrong name: com/sample/chap01/O
therPackageMemberModifiers)
Run Code Online (Sandbox Code Playgroud)
所以我认为我看到的是,如果软件包和子目录不匹配,Java代码将编译,但如果你这样做,似乎没有办法运行代码.那是对的吗?
Jon*_*eet 17
包名称必须与目录名称匹配才能正确找到类文件.它不具有的目录名在编译时的一些编译器(例如javac的)匹配,尽管其他人(如Eclipse)将至少给予警告.
"如果你这样做,运行代码的方法"是创建目录结构并手动将其放在那里 - 类文件本身是完全有效的.
请注意,如果使用该-d标志,javac将为您构建适当的目录层次结构,而不管源位置如何.例如:
javac -d bin ClassInPackage.java
Run Code Online (Sandbox Code Playgroud)
将创建任何所需的目录bin以匹配声明的包ClassInPackage.java.
说完了所有这些,我仍然强烈建议你让源目录与软件包匹配,即使你可以在没有它的情况下离开:)
| 归档时间: |
|
| 查看次数: |
3140 次 |
| 最近记录: |