2012-03-13 141 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