Java静态包导入报错:编译器为何无法识别t.b.u包?
解决静态导入
import static t.b.u.*;编译报错的问题 我来帮你梳理下问题的根源,其实是混淆了普通导入和静态导入的语法用途:
首先,
import static语法的作用是导入某个类中的静态成员(静态方法、静态变量),而不是导入整个包。你写的import static t.b.u.*;,编译器会把u当成t.b包下的一个类,试图导入这个类的所有静态成员,但实际上t.b包根本不存在(你的实际包是t.b.u),所以才会报错“package t.b does not exist”。如果你想导入
t.b.u包下的所有类,应该使用普通导入语句:import t.b.u.*;如果你确实是想导入
t.b.u包中某个类的静态成员(比如你提到的Print.java里的静态内容),那需要明确指定类名:import static t.b.u.Print.*;
再确认下你的CLASSPATH设置:/home/bbausch/thinking-in-java这个路径是正确的,因为它是t包的父目录(该路径下存在t/b/u/Print.java),Java编译器会在CLASSPATH下按照包结构查找类文件,这部分没问题。
总结一下:根据你的需求选择对应的导入方式,静态导入是针对类的静态成员,不是包,这就是编译器“忽略”u的原因——它从语法上就把u解析成了类,而不是包的一部分。
内容的提问来源于stack exchange,提问作者berndbausch
相关产品推荐
相关产品推荐

