为什么autoimport只有java.lang包?

时间:2010-01-15 17:53:28

标签: java import

我知道我们编写的每个java程序都会自动导入包java.lang,因此我们可以自动使用它中的所有类。

我的问题是为什么不自动导入java.util和其他包呢?这肯定会节省一些打字:)

所以请解释为什么没有这样做。

10 个答案:

答案 0 :(得分:31)

不自动导入太多的一个好理由是避免命名空间冲突。如果java.util中的所有内容都是自动导入的,然后您想要引用另一个名为“Map”的类,那么您必须通过其完全限定名称来引用它。

在回复此主题中的其他答案时,import实际上并未修改类文件的内部表示。实际上,这里是描述类文件结构的JVM规范的link:请参阅导入不存储在任何地方。

答案 1 :(得分:3)

所有优秀IDE的自动解析您的导入,仅在发生冲突时提示(两个具有相同类名的包)。

答案 2 :(得分:2)

因为java.lang有核心Java语言类,而java.util例如没有。

但是其他一些语言,比如Groovy会自动为你导入java.util:)

答案 3 :(得分:1)

我认为java.lang背后的想法是这些类都与语言和运行时有一些联系,这是特殊的,不能自己实现。原始包装器,VM安全性和权限以及检查,包和类加载 - 必须内置于Java系统的所有内容。 java.util中的所有东西,如集合,虽然非常有用,但可以用纯Java实现。它的某些部分(时区浮现在脑海中)甚至更好地由第三方库实现。

或者至少,在Java 1.0天中这是真的。今天,例如,Iterator也是该语言的组成部分,因为它自动被for-each循环使用,对吧?但是向后兼容性对于Java来说总是很重要,所以我们会永远忍受这种不一致。

答案 4 :(得分:0)

即使使用java.lang.System,我也遇到了命名空间冲突(我们的应用程序包含一个名为class的系统)。显式导入解决了我的问题,但是直到我指出com.mycompany.classes.System没有自动导入标识符System by Eclipse因为它已经存在于java.lang中而花了几分钟。

无论如何,使用太多标识符来污染类范围并不是一个好主意,因为您的代码将org.classes.**look** com.application.**like** com.classes.**this**.

自动导入java.lang是一个好主意,因为它包含java中使用的核心类和接口。

答案 5 :(得分:0)

@gameover,可能每个java程序都需要来自java.lang的类,

但是java.util类包含了我需要或不依赖于程序员的类。所以java有java.lang的默认配置,但我们需要根据我们的程序导入java.util类。

答案 6 :(得分:0)

java.lang包提供了构建java程序的基础类。对象是类层次结构的根,因此无论程序员是初学者还是专家,都需要为每个程序员提供。

如果我们谈论其他包,他们将用于扩大程序。例如,java.util包仅在需要Collection类时使用。在每个程序中都不使用集合类,而基本数据类型对于每个java程序都是必不可少的。

为了避免在程序中不必要地加载其他类,在自动导入基本包java.lang时,不会自动导入其他包。

答案 7 :(得分:0)

成为java.lang包有不同的原因是默认的 1) 实际上,无论我们在java程序中声明变量,还是存储在object中,Object类在java.lang包中都可用。它是类层次结构的超类,很多我们已经在对象类方法中执行了线程编程等操作。 2) 很多时候它是开发程序所必需的类,该类在java.lang包中可用, 因此,有必要导入,当java人开发jdk时,它是默认包,

答案 8 :(得分:-2)

自动导入也会导致一些内存问题,有时可能会发生冲突。 例如:java&中的日期类型SQL。

无论Java.lang包中定义了哪个基本核心java对象。 例如:任何数据类型&返回类型都在java.lang包中声明,所以要做一些基本的程序,我们也需要这个包导入。

答案 9 :(得分:-4)

没有java.lang包,开发是不可能的。 但是如果没有java.utiljava.io或任何其他包,我们仍然可以编写任意数量的程序。 这就是默认情况下导入java.lang包的原因。