【问题标题】:Java: asterisk for loading classesJava:用于加载类的星号
【发布时间】:2010-04-03 22:36:06
【问题描述】:

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

例如:

import java.awt.Graphics;

import java.awt.*;

【问题讨论】:

    标签: java memory class


    【解决方案1】:

    没有。您应该只导入所需的类,以使程序员清楚您的类实际需要哪些类。

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

    【讨论】:

    • 更重要的是,您输入要导入的类的全名以避免任何名称冲突:stackoverflow.com/questions/187453/…
    • 也许提一下也不错...现代 IDE 会为您处理添加导入的琐事,因此确实没有理由不使用完全合格的导入。
    • @Thorbjorn 不,我的意思是说程序员。我不认为编译器关心任何一种方式。另一方面,程序员可以从一组特定的导入中了解更多关于类的信息,而不是从 *'d 包中了解。
    【解决方案2】:

    简单地说:没有。

    import 语句不会被翻译成任何形式的字节码。它们只是避免使用(丑陋!)完全限定类型名称的捷径。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        你的意思是明星进口像 import pack.*;?

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

        【讨论】:

          【解决方案5】:

          我通常使用完全限定的类型名称,而不是这么大的语句。包的存在是有原因的,因为那个包的开发者很可能在他的包命名空间里填满了你不喜欢的各种废话,而你只想要那个类。

          【讨论】:

            【解决方案6】:

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

            话虽如此,明确导入您的类是一个很好的软件设计决策(并且 *-import 是不了解或不关心良好软件设计原则的懒惰者的标志......我不是在开玩笑,我'我死得很严重。)

            【讨论】:

            • 我关心好的软件设计原则。我不时使用明星进口。我不是懒惰的人。这完全是 coding 风格的问题。它与软件设计无关。
            • 对我来说,使用星号导入是环境问题。我在记事本中破解吗?给他们 ruvly 明星进口。我在写真正的程序吗?让 IDE 来处理它(如果它不进行单一导入,我发誓我会
            猜你喜欢
            • 1970-01-01
            • 2012-10-30
            • 2015-01-04
            • 2015-02-15
            • 1970-01-01
            • 2014-06-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多