1. 程式人生 > >Java語言規範第九/十章-介面/陣列

Java語言規範第九/十章-介面/陣列

Java語言規範第九章-介面(Java Language Specification – Chapter9 Interface)


並不是所有的
modifiers都是用於所有型別的介面,例如protectedprivate只適用於類直接包含的成員介面。static只適用於成員介面。

public class Test {

class book {

interface dictionary{}//error

}

}

public class Test {

interface dictionary{}//ok

}

The member interface dictionary can only be defined inside a top-level class or interface.

所有介面隱式的都是abstract的。

所有的介面成員都隱式的是public的。

介面只能繼承介面。

介面只能繼承,不可以implements

介面中的成員變數都是隱式的public static final的。

interface中的每個成員變數都必須包含初始化表示式。每個變數初始化只被呼叫一次,當介面被初始化的時候。

interface Test {

//error:Cannot reference a field before it is defined

float f = j;

int j = 1;

//error:Cannot reference a field before it is defined

int k = k+1;

}

在執行時,在編譯時初始化的常量先被初始化。這同樣適用於類中定義的static final常量。這意味著這些fields永遠不會檢視到其預設的初始值。

除非在匿名類的body中,否則在interfacefield的初始化表示式中使用this或者super關鍵字將導致編譯時錯誤。

interface BaseColors {

int RED = 1, GREEN = 2, BLUE = 4;

}

interface RainbowColors extends BaseColors {

int YELLOW = 3, ORANGE = 5, INDIGO = 6, VIOLET = 7;

}

interface PrintColors extends BaseColors {

int YELLOW = 8, CYAN = 16, MAGENTA = 32;

}

interface LotsOfColors extends RainbowColors, PrintColors {

int FUCHSIA = 17, VERMILION = 43, CHARTREUSE = YELLOW+90,HAHAHA = RED + 90;;

}//error:The field YELLOW is ambiguous.

當一個field被多次繼承時,只會產生一個成員。例如正在上述的例子中,RED通過RainbowColorsPrintColorsLotsOfColors繼承,但是卻不會產生變異錯誤。因為實際上只有一個RED field的宣告。

interface中的方法隱式的定義為public abstract方法,允許但是不推薦使用顯式的宣告。宣告static方法是編譯時錯誤的,因為static方法無法是abstract的。

但是在abstract類中是可以宣告static方法的。

Java語言規範第十章-陣列(Java Language Specification – Chapter10 Array)


陣列是物件,是動態建立的,並且可以賦值給
Object型別的變數。

int[] book = new int[]{};

println(book.getClass().getName());//[I

println(book.getClass().getSimpleName());//int[]

println(book.getClass().getCanonicalName());//int[]

String[] name = new String[]{};

println(name.getClass().getName());//[Ljava.lang.String;

println(name.getClass().getSimpleName());//String[]

println(name.getClass().getCanonicalName());//java.lang.String[]

int[][] books = new int[4][5];

println(books.getClass().getName());//[[I

println(books.getClass().getSimpleName());//int[][]

println(books.getClass().getCanonicalName());//int[][]

String[][] names = new String[][]{};

println(names.getClass().getName());//[[Ljava.lang.String;

println(names.getClass().getSimpleName());//String[][]

println(names.getClass().getCanonicalName());//java.lang.String[][]

Array的元素可以是任何型別,primitive或者reference。並且可以是介面或者抽象類。

宣告一個數組型別的變數並不建立一個array物件或者分配任何空間。只是建立變數本身。

}

由於陣列的長度不是該型別的一部分,所以一個數組型別的變數可以包含到不同長度陣列的引用。

陣列的lengthpublic final的。一旦初始化了,就不可以被修改。

所有的陣列都實現了CloneableSerializable