像这样未使用的导入 - import android.widget.RelativeLayout; 吃内存?只是想知道它有多少或只是有价值?也许这是个愚蠢的问题,但我还没有找到答案。
问问题
8261 次
5 回答
48
不,他们不带任何记忆。编译器仅使用导入在编译时解析类名。
编译器将每个类名更改为完全限定名。并删除导入语句。因此,import 语句不会变成字节码。
通配符导入的唯一问题是命名空间冲突,即,当在两个不同的包中定义了两个具有相同名称的类型时,使用通配符导入这些包将导致所使用的类型的名称冲突。
要查看编译器如何替换 import 语句,您可以使用javap
命令生成类的字节码。考虑下面的代码:
import java.util.*;
import java.util.regex.*;
public class Test {
public static void main(String[] args) {
}
}
只需编译上面的代码,并使用以下命令检查字节码:
javap Test
它给出以下输出:
public class Test {
public Test();
public static void main(java.lang.String[]);
}
因此,您可以看到String
type 被替换为它的完全限定 name java.lang.String
,并且字节码中没有 import 语句。
于 2013-08-09T18:54:52.830 回答
12
不,编译器在编译后将它们删除。但是你可能会面临两个问题
- 代码混乱
- 如果您从 jar 导入一些类,然后删除了 jar 但没有导入,那么您可能会收到编译时错误
于 2013-08-09T18:55:38.650 回答
2
运行时没有影响。它可以使编译过程变得非常慢(无法测量)。但就拥有它们而言,最好删除它们,因为它会使文件更小,并且更容易阅读实际使用的导入。
于 2013-08-09T18:56:21.487 回答
1
未使用的导入在运行时没有影响(因为字节码中没有导入)。但是,未使用的导入会影响编译器,但影响不大。
通常,仅导入您需要的内容将提高代码的可维护性和可读性。
于 2013-08-09T18:55:28.627 回答
0
于 2017-01-02T10:47:02.690 回答