Java打包和导入 - 我的错误在哪里?

时间:2018-05-22 13:58:47

标签: java import package syntax-error

尝试从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 ...

错误可能很明显,我没有看到它。有人可以帮忙吗?

1 个答案:

答案 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.*;