Java源文件(.java)和Java的字节码文件(.class)跟 package 是个什么关系?
平时使用 eclipse 的时候,发现 .java 文件目录必须和 package 包名保持一致,如果不一致,就会报错。
就是说,如果 User.java 使用 package com.domain; 那么 User.java 就必须放在项目源码目录 src 下的 com/domain 目录,编译后的字节码文件 User.class 必须放在字节码目录 bin 下的 com/domain 目录。
于是乎,我就一直以为 .java 文件和 .class 文件的存放目录都是和 package 相对应的。
今天无聊,就试着使用记事本练练手,在DOS环境下编译运行,无意中发现其实并不是那么回事儿。
.java 文件放在哪里都可以通过编译,但是要运行 .class 文件的话,那么 .class 文件就必须放在与 package 包名对应的目录下。
源文件真就是个文件而已,JVM真正在意的只有字节码文件,.class 文件符合规范能通过 package 找到就行,它才不管 .java 文件你放在哪儿呢。
那么,为什么 eclipse 强制要求源文件必须也要放在与 package 对应的目录呢?
我猜想,大概是与其智能化管理和代码提示有关。