網頁

2019/5/27

Java 什麼是命名空間(namespace)

在學習程式的過程中你一定看過namespace(命名空間)這個名詞,那namespace到底是指什麼東西?

namespace如名稱所述,就是充滿一堆名稱(name)的空間(space)。命名空間內的名稱必須是唯一的,而不同的空間中可以擁有相同的命名。

那為什麼要有namespace呢?因為有了namespace就可以在不同的命名空間中使用相同的名稱,因為儘管擁有相同的名稱,但仍可以透過不同的namespace來區別。

例如台北的王小明和高雄的王小明雖然都叫王小明,但你知道這兩個王小明是不同的,此時的命名空間就是行政區;或是三年A班的李淑芬跟三年B班的李淑芬是不同的,此時的命名空間就是班級編號。若沒有命名空間來區別,那全世界只能有一個人叫王小明或李淑芬,否則當提及王小明時,我們無法區別是指哪個王小明。

上面的說明不太好懂,請見下面的Java程式範例就會比較好理解了。

class MyClass {
    
    String a;
    String a; // Duplicate field MyClass.a
    
}

上面的MyClass類別中,有兩個名稱相同的成員變數a,但Java會無法區別兩個變數,而造成重複命名的編譯錯誤。MyClass就是一個namespace。


再看以下範例,下面程式不會有任何錯誤,method1()方法與method2()方法中都各自可以有名稱為a的變數,所以method1()方法與method2()也是一種命名空間。

class MyClass {
    
    String a;
    
    public void method1() {
        String a;
    }
    
    public void method2() {
        String a;
    }
    
}

而在不同的package下是可以有相同名稱的類別,例如com.abc.MyClasscom.xyz.MyClass,所以package也是一種命名空間。


沒有留言:

張貼留言