试图从 Bruce Eckel 的书中学习 Java,我不明白为什么编译器找不到我想要导入的库。我首先在 Windows/Cygwin 上完成此操作,现在在 Centos 7 上使用 OpenJDK 1.8.0。两个平台上的结果相同。
这一行:
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。为什么编译器会忽略 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 ...
这个错误可能非常明显,我没有看到。有人可以帮忙吗?
最佳答案
这与 Java 语言规范特别相关:https://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5.3
这两行本质上要求不同的东西:
import static t.b.u.*;
此语句要求从包t.b
导入名为u
的类的所有静态方法。
import t.b.u.*;
此语句要求导入 t.b.u
下的所有类。
静态导入仅针对 TypeName。正常导入以包或特定类为目标。
与静态导入大致相同的一般导入如下:
import t.b.u;
这要求仅从包 t.b
中导入类 u
。
在您的具体示例中,您可能希望此语句导入 Print 类的所有静态方法。
import static t.b.u.Print.*;
关于Java 打包和导入 - 我的错误在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50469603/