2016-01-08 96 views
1

我正在閱讀有關預定義的方法並正在瞭解導入語句。我已經看到並經常使用這些方法來使用某些預定義的方法,但我總是將它們放在程序的開頭。我的問題是,這些可以放在一個特定的代碼塊中,以便它只能在該塊中看到嗎?我不確定會有真正的原因,主要是好奇。Java導入語句

+1

@PritamBanerjee他指的是Java,指向'Scala'的鏈接。 –

+0

對,我的壞。複製了錯誤的一個。 –

+0

其他人已經發布了正確的答案,但關於你的陳述「我不確定實際上是否有這樣做的理由......」,實際上有很好的理由去做這些事情,斯卡拉允許它。一個原因的一個例子是限制導入的範圍,以便它僅在特定塊中可用。 –

回答

2

不,您需要在package聲明之後的class/interface之前定義它。

因此,導入對於整個.class文件總是可見的。沒有指定類的全名(例如,您需要導入java.util.List,或者您需要在任何地方都使用它的全名),您可以使用除本地包以外的其他包的成員,而不指定類的全名。

Oracle有一個tutorial on using package members

.class -file順序是defined爲:

  1. package規範(可選)
  2. import語句
  3. class/interface/enum定義
+1

值得注意的是''java.lang。*'會自動導入 –

+0

@ cricket_007 true,我將它改爲'java.util.List' :) –

+1

[JLS specification here](https://docs.oracle.com/ javase/specs/jls/se7/html/jls-7.html#jls-7.3) –

4

java文件包含三個零件:

  1. 包定義
  2. 進口定義(可選)
  3. 的類(或接口/枚舉)定義。

,它也必須是這個順序,你會得到編譯錯誤,如果它不是順序

0

我的猜測是,會給你一個編譯器錯誤。但是,如果您在實例化類時指定了類的完整軟件包名稱,則可以有效地實現相同的功能。

如:

public String getString() { 
    return new com.package.some.Class("hello world").toString(); 
} 

在這種情況下,你不需要在類的頂部有一個「進口」指令,因爲你是在告訴你想要的類所在的方法中,編譯器在com.package.some包中,該類稱爲Class。

這實際上發生在野外,例如,您必須在具有相同名稱的不同包中使用類。您只能導入其中一個,另一個則必須在代碼內部內聯包定義。

import com.package.some.Class; 

public class Yolo { 

    private Class classA; 
    private com.package.other.Class classB; 

    public Yolo(Class classA, com.package.other.Class classB) { 
     this.classA = classA; 
     this.classB = classB; 
    } 
} 

您不能只導入'Class'對象並將它們引用爲Class,因爲編譯器不會知道哪一個。所以,這是一種有效的情況,你會發現這種事情真的發生了。

0

對於Oracle文檔:

導入封裝部件

要導入的特定成員到當前文件,在任何類型定義,但 後放一個進口 聲明在文件的開頭包聲明,如果有的話。以下是如何從 上一節中創建的圖形包中導入Rectangle類的方法。