Java:用于加载类的星号

Java:用于加载类的星号,java,memory,class,Java,Memory,Class,直接加载所需的类是减少Java应用程序总体内存使用的好方法吗 例如: import java.awt.Graphics; vs 不需要。您应该只导入所需的类,以便向程序员明确您的类实际需要哪些类 Import语句只告诉编译器在何处查找您正在使用的类-这并不意味着包中的所有类都加载到内存中。简单地说:不 import语句不会转换为任何形式的字节码。它们只是避免使用(难看的!)完全限定类型名的快捷方式。你是说像这样的星型导入吗 导入包。* 在Java中,它与内存使用无关,import仅用于更改引用

直接加载所需的类是减少Java应用程序总体内存使用的好方法吗

例如:

import java.awt.Graphics;
vs


不需要。您应该只导入所需的类,以便向程序员明确您的类实际需要哪些类

Import语句只告诉编译器在何处查找您正在使用的类-这并不意味着包中的所有类都加载到内存中。

简单地说:不


import
语句不会转换为任何形式的字节码。它们只是避免使用(难看的!)完全限定类型名的快捷方式。

你是说像这样的星型导入吗
导入包。*

在Java中,它与内存使用无关,
import
仅用于更改引用类的方式。
然而,在星型导入方面存在编码实践方面的问题。

显式导入所需的类与执行*-导入没有区别。JVM只加载您最终使用的内容,仅此而已


话虽如此,显式导入类是一个很好的软件设计决策(而且*-导入是不知道或不关心好的软件设计原则的懒汉的标志……我不是开玩笑,我是认真的。)

正如其他人所说,导入只由编译器使用。您可以使用所有内容的全名编写整个程序,而无需任何导入,但这将很快变得相当庞大

java.io.InputStream is = new java.io.FileInputStream(new java.io.File("foo"));

星型导入是为了减少手工编写所有导入语句的繁琐,但会导致导入太多的内容,因此编译器有多种可能性。因此,像Eclipse这样的现代IDE会逐个导入所有内容,这样就不会发生这种情况。

我通常使用完全限定的类型名,而不是如此大的语句。包的存在是有原因的,这是因为包的开发人员可能用各种你不喜欢的垃圾填满了包的名称空间,而你只想要那个类。

我关心好的软件设计原则。我经常使用星型导入。我不是一个懒汉。这完全是一个编码风格的问题。这与软件设计无关。对我来说,使用star导入是一个环境问题。我是不是在记事本上乱写?给我那些可怕的星星。我在写真正的程序吗?让IDE来处理它(天哪,如果它不进行单一导入,我发誓我会说,更重要的是,为了避免任何名称冲突,您需要输入所导入类的全名:也许最好也提一下……现代IDE会为您处理添加导入的琐事,因此没有什么理由不使用完全限定的导入。@Thorbjorn不,我的意思是说程序员。我认为编译器对这两种方式都不关心。另一方面,程序员可以从一组特定的导入中了解到更多关于类的信息,而不是从*d包中。
java.io.InputStream is = new java.io.FileInputStream(new java.io.File("foo"));