今天來談談類別中的非主菜部分,沒有它們類別同樣可以運作,甚至可以說大部分的實務上不會用到這2個東西,但既然我們目標是要考證照,勢必需要了解一下的,那就是內部類別以及區塊。
class OuterClass{
class InnerClass{
}
}
而如果想要創建出inner class的實例,必須要先創建出外層class的實例後,才可創建inner class實例:
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
以上的情況相當罕見,通常inner class會被定義為private,用來處理比較複雜的結構,不太會讓外部直接取用。若真要被外部取用的話,比較常見的是定義為static inner class:
class OuterClass{
static class InnerClass{
}
}
要注意只有內部類別才可以定義為static,外部類別沒辦法定義為static。而被定義為static的內部類別,就可以直接利用外部類別的類別名稱當作命名空間來創建實例:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
class Player{
String name;
{
this.name = "Jack";
}
}
這樣的block,代表在正要創建實例但尚未完成之前,就會先執行block裡面的內容,所以這個範例中,如果我們直接使用預設建構子來創建一個Player時,name會被指派為"Jack"。
static{
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException ce){
ce.printStackTrace();
}
}