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

标签 java import package syntax-error

试图从 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/

相关文章:

JAVA 8 在启动时崩溃并出现 fatal error 日志 - Solaris 10 (sparc)

java - Hibernate 5 Infinispan :java. lang.NoSuchMethodError : org. jboss.logging.Logger.debugf(Ljava/lang/String;I)V

java - 访问 .jar 文件中的图像文件时出现 NullPointerException

sql - 将本地 SQL 数据库复制到 Azure

javascript - JSPM - 使用导入包含客户端库文件与使用脚本标记相比有什么优点/缺点?

java - 如何在 Java 中编写表达式的解释

python - 支持多个 Python 模块版本(具有相同版本的 Python)

ubuntu - 在 Ubuntu 上安装 python-twisted 10.2

r - 使用 R bioconductor 包 STRINGdb 操作 String-db

npm - "lerna changed"列出所有包