Java项目中如何从其他目录/包导入类?附目录结构及尝试情况
解决Java跨目录类导入问题
嘿,我来帮你搞定这个导入的坑!Java的包和目录结构是严格绑定的,这也是很多开发者刚接触大型项目时容易卡壳的点,咱们一步步理清楚:
第一步:把包声明和目录结构对应上
首先得给两个类写对包声明,这是正确导入的基础:
Bill.java 位于
main/repository目录下(我猜你写的.dir只是用来标识这是目录,实际目录名是main和repository),所以它的开头必须是:package main.repository; public class Bill { // 你的类逻辑代码 }要是你的目录名真的是
main.dir和repository.dir,那包名就得写成main.dir.repository.dir——但这种带点的目录名在Java里非常不推荐,建议改成不带点的名称(比如main、repository),避免和包名的点语法混淆。AutomaticBillPay.java 位于
transaction目录下,它的包声明和导入语句应该这么写:package transaction; // 这才是正确的导入语句 import main.repository.Bill; public class AutomaticBillPay { public static void main(String[] args) { Bill myBill = new Bill(); // 现在就能正常使用Bill类了 } }
第二步:拆解你之前的错误写法
咱们逐个看你试的写法为啥行不通:
package main.repositorysys;:你的目录是repository而非repositorysys,包名和实际目录不匹配,编译直接报错import main.repositorysys.Bill;:同样是包名写错了,对应不上main/repository这个实际路径import repositorysys.Bill;:缺少了main.这个顶层包前缀,Java找不到这个类的完整路径import Bill;:只有两个类在同一个包下时才能这么写,但你的两个类分别在main.repository和transaction两个不同包,自然无效
第三步:编译时要注意类路径
编译的时候,得把项目的根目录(也就是包含main和transaction的那个目录)加到类路径里。假设你的项目根目录是myproject,结构是这样:
myproject/ main/ repository/ Bill.java transaction/ AutomaticBillPay.java
那编译命令可以这么写:
# 先编译Bill类,把编译后的文件放到bin目录 javac -d bin myproject/main/repository/Bill.java # 再编译AutomaticBillPay类,指定类路径包含bin目录 javac -d bin -cp bin myproject/transaction/AutomaticBillPay.java
或者更简洁的方式,直接在项目根目录下运行:
javac -d bin main/repository/Bill.java transaction/AutomaticBillPay.java
运行的时候也要指定类路径:
java -cp bin transaction.AutomaticBillPay
内容的提问来源于stack exchange,提问作者bcr
相关产品推荐
相关产品推荐

