0

我正在通过记事本(Windows 7)执行程序导入整个程序包使代码变得简单,但是当我使用详细命令时,程序看起来很重。在编译和运行我的 java 类时,已经加载了很多不需要的代码类文件,java 中是否有任何功能可以防止不需要的类文件加载?

我知道有 IDE,但现在我对记事本感觉很舒服。所以有人建议是否有任何功能可以避免在完全导入包时将不需要的类加载到我编译的程序中?

以及什么时候应该执行GC(特定区域是否添加组件/设置动作事件)?

4

2 回答 2

3

Java 不是为记事本精心优化的语言。导入语句就是一个很好的例子:如果没有 IDE 来为您管理它们,您将遇到日常的麻烦事。您最终会屈服并承认在记事本中编写 Java并不舒适

回答您的直接问题:

  1. 导入语句与类加载无关。它们仅用于解析您在代码中使用的简单类名的完全限定名。类在第一次使用时严格按需初始化,并且类的加载方式是特定于实现的,但通常它也是惰性的。

  2. Java 中的垃圾收集是全自动的,您永远不应该自己执行它。实际上,没有这样做的机制:System.gc只是对运行时的提示。

于 2012-10-31T09:38:09.833 回答
1

考虑以下简单的代码片段:

public class HelloWorld {

    public static void main(String[] args) {
        List<Object> l = new Vector<Object>();
        System.out.println("Hello World:" + l.size());
    }
}

要使用Listand Vector,您必须

import java.util.*;

或者

import java.util.List;
import java.util.Vector;

或者,您甚至可以将包名添加到代码中的类名中,而根本不使用任何导入。

在任何一种情况下,输出java -verbose都是完全相同的。此外,在这两种情况下,它都列出了为这个简单代码加载的 347 个类。原因是它不仅必须加载HelloWorld.class,java.util.List.classjava.util.Vector.class,还必须加载 Java 运行时所需的任何依赖类以执行您的应用程序(并且,在此示例中,这包括java.lang.System.class来自 的几个类java.io,它们被拉入通过System.out参考)。

因此,导入完整的包不会对性能造成影响。在类文件级别上,所有类都通过其完全限定名称引用,其中包括包名称。这与类的导入方式无关。

于 2012-10-31T09:52:23.307 回答