1. 程式人生 > 實用技巧 >Java 使用理解

Java 使用理解

1,extendsimplements區別

  extends:繼承,在類的宣告中,通過關鍵字extends來建立一個類的子類,可以使用或重寫父類(前提是那個類不要宣告為final或者那個類定義為abstract的就能繼承)

  implements:宣告使用,一個類通過關鍵字implements宣告自己使用一個或者多個介面,實現一個介面就是要實現該介面的所有的方法(抽象類除外)

2,單引號和雙引號的區別:

單引號是char型別,雙引號是String型別

char表示字元,定義時使用用單引號表示,只能儲存一個字元。

String表示字串,定義時使用雙引號表示,可以儲存0個或多個字元,其實string型別就是char型別的陣列表現形式。

3,equals和==的區別:

== 比較的是變數(棧)記憶體中存放的物件的(堆)記憶體地址,用來判斷兩個物件的地址是否相同,即是否是指相同一個物件。

equals用來比較的是兩個物件的內容是否相等,由於所有的類都是繼承自java.lang.Object類的,所以適用於所有物件,如果沒有對該方法進行覆蓋的話,呼叫的仍然是Object類中的方法,而Object中的equals方法返回的卻是==的判斷。

4,註解(Annotation)

  又稱之為java的標註,是JDK5.0 引入的一種註釋機制。Java 語言中的類、方法、變數、引數和包等都可以被標註。Java 標註可以通過反射獲取標註內容。在編譯器生成類檔案時,標註可以被嵌入到位元組碼中。Java 虛擬機器可以保留標註內容,在執行時可以獲取到標註內容 。 當然它也支援自定義 Java 標註。

  內建的註解(Java 定義了一套註解,共有 7 個,3 個在 java.lang 中,剩下 4 個在 java.lang.annotation 中。)

A,作用在程式碼的註解是

  • @Override - 檢查該方法是否是重寫方法。如果發現其父類,或者是引用的介面中並沒有該方法時,會報編譯錯誤。
  • @Deprecated - 標記過時方法。如果使用該方法,會報編譯警告。
  • @SuppressWarnings - 指示編譯器去忽略註解中宣告的警告。

作用在其他註解的註解(或者說 元註解)是:

  • @Retention - 標識這個註解怎麼儲存,是隻在程式碼中,還是編入class檔案中,或者是在執行時可以通過反射訪問。
  • @Documented - 標記這些註解是否包含在使用者文件中。
  • @Target - 標記這個註解應該是哪種 Java 成員。
  • @Inherited - 標記這個註解是繼承於哪個註解類(預設 註解並沒有繼承於任何子類)

從 Java 7 開始,額外添加了 3 個註解:

  • @SafeVarargs - Java 7 開始支援,忽略任何使用引數為泛型變數的方法或建構函式呼叫產生的警告。
  • @FunctionalInterface - Java 8 開始支援,標識一個匿名函式或函式式介面。
  • @Repeatable - Java 8 開始支援,標識某註解可以在同一個宣告上使用多次。

B,Annotation 組成部分

  01) Annotation 就是個介面。

    "每 1 個 Annotation" 都與 "1 個 RetentionPolicy" 關聯,並且與 "1~n 個 ElementType" 關聯。可以通俗的理解為:每 1 個 Annotation 物件,都會有唯一的 RetentionPolicy 屬性;至於 ElementType 屬性,則有 1~n 個。

  02) ElementType 是 Enum 列舉型別,它用來指定 Annotation 的型別。

    "每 1 個 Annotation" 都與 "1~n 個 ElementType" 關聯。當 Annotation 與某個 ElementType 關聯時,就意味著:Annotation有了某種用途。例如,若一個 Annotation 物件是 METHOD 型別,則該 Annotation 只能用來修飾方法。

  03) RetentionPolicy 是 Enum 列舉型別,它用來指定 Annotation 的策略。通俗點說,就是不同 RetentionPolicy 型別的 Annotation 的作用域不同。

C,java 自帶的 Annotation

  01)通用定義

@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation1 {
}