2014-04-23 112 views
0

如果我們對某個類使用靜態導入,編譯實際類時編譯器是否會爲靜態導入的類生成一個類文件?靜態導入和類文件生成

例:

import static com.x.y.util.B.getIds(); 

public class A { 
... 
} 

當編譯器編譯類A,將它產生B以及類文件?

+0

此導入不好看。另外,如果類「B」在「A」內,則不需要導入它。爲所有類生成類文件,無論它們是靜態的還是非靜態的,聲明的或匿名的。 –

回答

0

不,導入語句不會導致編譯器生成任何東西。想想看:如果編譯器沒有源代碼,它如何生成類?根據定義,編譯器將源代碼轉換爲可執行代碼(如果是java,則爲字節代碼)。

順便說一句你的例子中靜態導入的語法不正確。你不應該在靜態導入使用()

import static com.x.y.util.B.getIds;

+0

我不確定我的問題是否清楚,但不是關於沒有源代碼生成類文件,源代碼在那裏,但我們應該分別編譯類A和B,然後執行A或者如果我們編譯A 。就像匿名內部類一樣,編譯器生成$ 1.class。我有這個疑問的原因是我們在開發環境中的一個應用程序中沒有在服務器中存在靜態導入的類,它工作正常,但在本地環境中它不工作,我不得不將這個類也包含到構建中。 是的,謝謝你糾正語法:) – Chinmaya

+0

在這種情況下,答案是肯定的,因爲任何其他引用的導入語句會導致依賴類被編譯。但通常你不必關心這個:任何構建系統都不適合你。 – AlexR

0

當使用關鍵字進口或只是全名是使用某種類型的類。您必須確保在編譯期間,編譯器將這兩個類都放在構建路徑中。

靜態導入允許您訪問導入類的靜態成員。而已。

class Bar { 

public static int getID() { 
    return -1; 
} 

} 

而對於靜態導入

import static Bar.getID; 

class Foo { 

    private void foo() { 
    int id = getID(); //instead of Bar.getID(); 
    } 

} 

Read more on Oracle docs