Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 注解(Annotations)

在本教程中,我們將通過示例學(xué)習(xí)什么是注解,不同的Java注解以及如何使用它們。

Java注解是我們程序源代碼的元數(shù)據(jù)(有關(guān)數(shù)據(jù)的數(shù)據(jù))。

它們向編譯器提供關(guān)于程序的附加信息,但不是程序本身的一部分。這些注解不會影響已編譯程序的執(zhí)行。

注解以@開頭。其語法為:

@AnnotationName

讓我們以@Override注解為例。

@Override注解指定了已標(biāo)有此注解的方法重寫用同樣名稱的方法,返回類型和參數(shù)列表中的父類的方法。

重寫方法時,不是必須使用@Override。但是,如果我們使用它,編譯器會在重寫方法時,如果出現(xiàn)錯誤(比如錯誤的參數(shù)類型),就會給出一個錯誤。

示例1:@Override 注解示例

class Animal {
  public void displayInfo() {
    System.out.println("I am an animal.");
  }
}

class Dog extends Animal {
  @Override
  public void displayInfo() {
    System.out.println("I am a dog.");
  }
}

class Main {
  public static void main(String[] args) {
    Dog d1 = new Dog();
    d1.displayInfo();
  }
}

輸出結(jié)果

I am a dog.

在此示例中,方法displayInfo()同時存在于父類Animal和子類中Dog。調(diào)用此方法時,將調(diào)用子類的方法,而不是超類中的方法。

注解格式

注解也可以包括元素(成員/屬性/參數(shù))。

1.標(biāo)記注解

標(biāo)記注解不包含成員/元素。它僅用于標(biāo)記聲明。

其語法為:

@AnnotationName()

由于這些注解不包含元素,因此不需要括號。例如,

@Override

2.單元素注解

單個元素注解僅包含一個元素。

其語法為:

@AnnotationName(elementName = "elementValue")

如果只有一個元素,則習(xí)慣上將該元素命名為value。

@AnnotationName(value = "elementValue")

在這種情況下,也可以移除元素名稱。元素名稱value默認(rèn)為。

@AnnotationName("elementValue")

3.多元素注解

這些注解包含多個用逗號分隔的元素。

其語法為:

@AnnotationName(element1 = "value1", element2 = "value2")

注解位置

任何聲明都可以通過將其放在聲明上面來標(biāo)記注解。從Java 8開始,注釋也可以放在類型之前。

1.在聲明語句上方

如上所述,Java注釋可以放在類,方法,接口,字段和其他程序元素聲明的上方。

示例2:@SuppressWarnings注釋示例

import java.util.*;

class Main {
  @SuppressWarnings("unchecked")
  static void wordsList() {
    ArrayList wordList = new ArrayList<>();

    //這將導(dǎo)致未經(jīng)檢查的警告
    wordList.add("nhooo"); 

    System.out.println("Word list => " + wordList);
  }

  public static void main(String args[]) {
    wordsList();
  }
}

輸出結(jié)果

Word list => [nhooo]

如果上述程序在不使用@SuppressWarnings("unchecked")注解的情況下進行編譯,則編譯器仍將編譯該程序,但會給出如下警告:

Main.java uses unchecked or unsafe operations.
Word list => [nhooo]

我們收到警告

Main.java uses unchecked or unsafe operations

因為下面的語句。

ArrayList wordList = new ArrayList<>();

這是因為我們尚未定義數(shù)組列表的通用類型。 我們可以通過在尖括號<>中指定泛型來解決此警告。

ArrayList<String> wordList = new ArrayList<>();

2.類型注解

在Java 8之前,注釋只能應(yīng)用于聲明?,F(xiàn)在,也可以使用類型注釋。這意味著我們可以在使用類型的任何地方放置注解。

構(gòu)造函數(shù)調(diào)用

new @Readonly ArrayList<>()

類型定義

@NonNull String str;

此聲明指定String類型的非空變量str,以避免NullPointerException。

@NonNull List<String> newList;

該聲明指定String類型的非空列表。

List<@NonNull String> newList;

該聲明指定String類型的非空值的列表。

類型轉(zhuǎn)換
newStr = (@NonNull String) str;

extends 和 implements 子句

class Warning extends @Localized Message

throws 子句

public String readMethod() throws @Localized IOException

類型注釋使Java代碼可以得到更好的分析,并提供更強大的類型檢查。

注解類型

1. 預(yù)定義的注解

  1. @Deprecated

  2. @Override

  3. @SuppressWarnings

  4. @SafeVarargs

  5. @FunctionalInterface

2. 元注解

  1. @Retention

  2. @Documented

  3. @Target

  4. @Inherited

  5. @Repeatable

3. 自定義注解

這些注釋類型在Java 注解類型教程中有詳細(xì)描述。

注解的使用

  • 編譯器指令 - 可用于向編譯器提供指令,檢測錯誤或禁止警告。 如內(nèi)置的注解@Deprecated,@Override, @SuppressWarnings。

  • 編譯時指令 - 這些批注提供的編譯時指令幫助軟件構(gòu)建工具生成代碼,XML文件等。

  • 運行時指令 - 可以定義一些注解以在運行時向程序提供指令。這些注解是使用Java 反射訪問的。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清