3

有人可以解释一下 Java 中的 import 语句吗?有些导入带有 * 后缀,有些则没有。这两者有什么区别?在 import 语句中使用 * 是否会导入所有类?

看这里导入

在这里,他们说过,尽管 import 语句似乎是嵌套的,但事实并非如此。有人可以详细解释一下吗?

4

4 回答 4

11

使用*被认为是一种不好的做法。它用于导入该包中的所有文件。更正确的方法是列出您需要的每个类,特别是在您在 IDE 之外进行代码审查并且需要知道您正在使用的类的版本的情况下。从本质上讲,它滋生了开发团队的懒惰。

评论

对于那些认为这不是我所说的“坏”做法的人。你怎么能说这是一个好习惯呢?

import java.util.*;  
import java.io.*;

即使编译器忽略了*除了List您导入的之外的所有内容,这对将来查看代码的人有何帮助?我认为这里的很多人都忘记了您正在为人类而不是计算机编写代码。此外,当 Java 消失并且您使用 SuperAwesomeLanguage 时,您怎么可能转换此代码?鉴于以下示例,当您对 java 的了解为零时,请将其转换为您的新语言:

public class Foo  
{
    private List list;
}

List在吗io?甚至是io必需的?问题是你不知道。因此,通过明确,您可以指导未来的开发人员了解需要哪些类。

于 2013-02-15T15:04:26.847 回答
1

从您的链接:

导入 java.util.*;

* 是一个“正则表达式运算符”,它将匹配任何字符组合。因此,此导入语句将导入 java.util 中的所有内容。如果您尝试过输入并运行上面的示例程序,您可以将 import 语句更改为这个。

所以是 * 后缀导入此路径中的所有类

于 2013-02-15T15:06:26.713 回答
1
import com.example.*

导入 com.example 包中的所有类

import com.example.ClassName

只导入 ClassName 类

于 2013-02-15T15:06:37.500 回答
1

在 import 语句中使用 * 是否会导入所有类

是的。

来自 Oracle 的文档:

按需类型导入声明允许根据需要导入命名包或类型的所有可访问类型。

于 2013-02-15T15:03:16.187 回答