尝试从Bruce Eckel的书中学习Java,我不明白编译器为什么找不到我要导入的库。我首先使用OpenJDK 1.8.0在Windows / Cygwin和现在的Centos 7上完成此操作。两个平台都有相同的结果。
这一行:
import static t.b.u.*;
导致编译器错误
$ javac TestPrint.java
TestPrint.java:2: error: package t.b does not exist
import static t.b.u.*;
^
我同意包 t.b 不存在,但我实际上想要导入包 t.b.u 。为什么编译器会忽略你?
CLASSPATH设置如下:
$ export|grep CLASS
declare -x CLASSPATH="/home/bbausch/thinking-in-java"
包是一个文件:
$ cat /home/bbausch/thinking-in-java/t/b/u/Print.java
package t.b.u;
import java.io.*;
public class Print {
... etc ...
错误可能很明显,我没有看到它。有人可以帮忙吗?
答案 0 :(得分:2)
这与Java语言规范特别相关:https://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5.3
这两行固有地要求不同的东西:
import static t.b.u.*;
此语句要求从包 u
中导入名为t.b
的类的所有静态方法。
import t.b.u.*;
此语句要求导入t.b.u
下的所有类。
静态导入仅针对TypeName。正常导入针对包或特定类。
静态导入的大致等效的一般导入是:
import t.b.u;
这要求只从包u
导入类t.b
。
在您的具体示例中,您可能希望此语句导入Print类的所有静态方法。
import static t.b.u.Print.*;