【发布时间】:2010-04-03 22:36:06
【问题描述】:
直接加载所需的类是减少 Java 应用程序整体内存使用的好方法吗?
例如:
import java.awt.Graphics;
对
import java.awt.*;
【问题讨论】:
直接加载所需的类是减少 Java 应用程序整体内存使用的好方法吗?
例如:
import java.awt.Graphics;
对
import java.awt.*;
【问题讨论】:
没有。您应该只导入所需的类,以使程序员清楚您的类实际需要哪些类。
Import 语句只是告诉编译器在哪里查找您正在使用的类 - 这并不意味着包中的所有类都加载到内存中。
【讨论】:
简单地说:没有。
import 语句不会被翻译成任何形式的字节码。它们只是避免使用(丑陋!)完全限定类型名称的捷径。
【讨论】:
正如其他人所说,导入仅由编译器使用。您可以使用所有内容的全名编写整个程序而无需任何导入,但这会很快变得相当大。
java.io.InputStream is = new java.io.FileInputStream(new java.io.File("foo"));
星型导入是为了减少手工编写所有导入语句的繁琐,但导致太多的东西被导入,使编译器有不止一种可能。因此,像 Eclipse 这样的现代 IDE 会一一导入所有内容,因此不会发生这种情况。
【讨论】:
你的意思是明星进口像
import pack.*;?
在 Java 中,它与内存使用无关,import 仅用于更改您引用类的方式。
但是,关于星号导入存在编码实践问题。
【讨论】:
我通常使用完全限定的类型名称,而不是这么大的语句。包的存在是有原因的,因为那个包的开发者很可能在他的包命名空间里填满了你不喜欢的各种废话,而你只想要那个类。
【讨论】:
显式导入您需要的类与执行 *-import 没有区别。 JVM 只加载您最终使用的内容,仅此而已。
话虽如此,明确导入您的类是一个很好的软件设计决策(并且 *-import 是不了解或不关心良好软件设计原则的懒惰者的标志......我不是在开玩笑,我'我死得很严重。)
【讨论】: