下面的进口报关会进口什么?

What will the following import declaration import?

java.io.Reader.*;

我知道 Reader 是 class,不是包裹。

那么,上面的声明会导入什么?

在同一个文件中,您可以同时拥有两者

import java.io.Reader;          //Statement 1

import static java.io.Reader.*;        //Statement 2

第一个只从包 java.io 导入 class Reader, 第二个是导入 class Reader 的所有静态成员,似乎只有

private static final int maxSkipBufferSize = 8192;

所以,非常无用,因为它是私有的,你不能从你的 class 访问它,既不能用于阅读也不能用于修改

语句 1 将包含您可以在代码中使用的 Reader Class,因为此 class 用于读取字符流

声明 2 将包括来自 Reader 的所有 Classes。* 包(如果它是一个包),我假设它是通用的

声明:

import java.io.Reader.*;

type-import-on-demand 声明的示例。来自 Java Language Specification:

A type-import-on-demand declaration allows all accessible types of a named package or type to be imported as needed.

由于 java.io.Reader 不包含嵌套 类 或其他可访问的类型,声明将被简单地忽略。

请注意 Java 也有一个 import static 声明。所以

import static java.io.Reader.*;

将是 static-import-on-demand 声明的示例。同样,根据 Java 语言规范:

A static-import-on-demand declaration allows all accessible static members of a named type to be imported as needed.

并且由于 java.io.Reader 也没有可访问的静态成员,声明将再次被忽略。