主要內(nèi)容
JDK內(nèi)置的基本注解類型(3個(gè))
自定義注解類型
對(duì)注解進(jìn)行注解(4個(gè))
利用反射獲取注解信息(在反射部分涉及)
注解 (Annotation) 概述
從 JDK 5.0 開(kāi)始, Java 增加了對(duì)元數(shù)據(jù)(MetaData) 的支持, 也就是 Annotation(注解)洛搀;
Annotation 其實(shí)就是代碼里的特殊標(biāo)記, 這些標(biāo)記可以在編譯, 類加載, 運(yùn)行時(shí)被讀取, 并執(zhí)行相應(yīng)的處理. 通過(guò)使用 Annotation, 程序員可以在不改變?cè)羞壿嫷那闆r下, 在源文件中嵌入一些補(bǔ)充信息跷车;
Annotation 可以像修飾符一樣被使用, 可用于修飾包,類, 構(gòu)造器, 方法, 成員變量, 參數(shù), 局部變量的聲明, 這些信息被保存在 Annotation 的 “name=value” 對(duì)中动猬;
Annotation 能被用來(lái)為程序元素(類, 方法, 成員變量等) 設(shè)置元數(shù)據(jù)物臂。
/*
- 注解
- 1、JDK提供的常用的注解
- @Override: 限定重寫(xiě)父類方法, 該注釋只能用于方法
@Deprecated: 用于表示某個(gè)程序元素(類, 方法等)已過(guò)時(shí)
@SuppressWarnings: 抑制編譯器警告 - 2、如何自定義注解
- 3、原注解:另外一些注解用來(lái)補(bǔ)充說(shuō)明它自己
*/
```
package com.atguigu.java1;
import java.util.List;
import java.beans.PersistenceDelegate;
import java.util.ArrayList;
public class TestAnnotation {
public static void main(String[] args) {
Person p = new Student();
p.walk();
@SuppressWarnings({ "unused", "rawtypes" })//兩個(gè)警告:"unused"是指變量沒(méi)有使用讼油;"rawtypes"沒(méi)有使用泛型
List list = new ArrayList();
}
}
@MyAnnotation("atguigu")//自定義的注解,可以用來(lái)修飾屬性呢簸、方法矮台、構(gòu)造器等等
class Student extends Person{
@Override//可以寫(xiě)也可以不寫(xiě),可以避免例如方法名寫(xiě)錯(cuò)而執(zhí)行了父類的方法
public void walk(){
System.out.println("學(xué)生走路");
}
@Override
public void eat(){
System.out.println("學(xué)生吃飯");
}
}
class Person{
String name;
int age;
@MyAnnotation(value = "atguigu")
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person(){
//super();
}
@Deprecated//可以用來(lái)修飾方法根时,也可以用來(lái)修飾類瘦赫。就是告訴程序員,該方法已經(jīng)過(guò)時(shí)
public void walk(){
System.out.println("走路");
}
public void eat(){
System.out.println("吃飯");
}
}
```
```
package com.atguigu.java1;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/*
JDK5.0提供了專門(mén)在注解上的注解類型蛤迎,稱為元注解确虱,分別是:
Retention//指明該注解的存活時(shí)間
Target//指明該注解的可修飾類型
Documented//指明該注解是否能生成java.doc文檔
Inherited//說(shuō)明被修飾的注解具有繼承性
*/
import java.lang.annotation.Target;
//自定義的注解,使用較少
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)//
public @interface MyAnnotation {
String value() default "hello";
}
```