2012-03-13 156 views
9

可以说,类中有一些导入语句。当为该类生成字节码时,这些导入语句会发生什么。导入语句字节代码含义

如果import语句运行期间被忽略,如何在运行期间解决了类方法的依赖关系。

+4

为什么不自己找?编写一个类的几个变体:一个依赖于外部类,一个依赖于(例如)通过导入的java.util.List',一个依赖于'List',但使用它完全限定(没有导入)。然后在每个上使用'javap -c',看看结果如何。 – yshavit 2012-03-13 08:09:16

+1

与@yshavit注释互补,在编译过程中使用'javac -g:none Foo.java'不会在'.class'文件中生成调试信息(例如行号),然后比较生成的'.class'es并且它们在字节级别是相同的,并且可以通过测试获得它们中的每一个的散列。 – 2015-06-01 18:36:33

回答

9

import语句的目的只是为了让生活代码的人的读者(和作者)更容易。因此它们被字节码中对全限定类/方法名称的引用所取代。而未使用的导入语句将被忽略。

1

进口在Java中只是一个速记

因此,如果您导入java.util.*你不必写在你的代码java.util.ArrayList但可以写ArrayList

1

import声明仅是那里的编译器,使它知道您的代码中可以访问哪些类名称(或静态方法名称)(即MyClass而不是foo.bar.MyClass)。在幕后,这只是用来解析完全限定的类名,然后在字节码中使用。

+1

它用于将非限定名称*解析为完全限定名称。 – EJP 2012-03-13 08:12:31

+0

这就是我的意思。我不应该用外语写作,而仍然半睡半醒;) – Joey 2012-03-13 09:24:20