第17篇-JAVA Annotation 注解

2022-03-11 11:29 更新
  • 每篇一句 :真的努力后你會發(fā)現(xiàn)自己要比想象的優(yōu)秀很多
  • 初學(xué)心得: 懷著一顆奮斗不息的心,一切困苦艱辛自當(dāng)迎刃而解
  • (筆者:JEEP/711)[JAVA筆記 | 時間:2017-05-17| JAVA Annotation注解 ]

1.什么是注解(Annotation)

Annotation 其實就是代碼里的特殊標(biāo)記, 它用于替代配置文件,也就是說,傳統(tǒng)方式通過配置文件告訴類如何運行,有了注解技術(shù)后,開發(fā)人員可以通過注解告訴類如何運行。在Java技術(shù)里注解的典型應(yīng)用是:可以通過反射技術(shù)去得到類里面的注解,以決定怎么去運行類
- Annotation(注解)就是Java提供了一種元程序中的元素關(guān)聯(lián)任何信息和著任何元數(shù)據(jù)(metadata)的途徑和方法
- Annotion(注解)是一個接口,程序可以通過反射來獲取指定程序元素的Annotion對象,然后通過Annotion對象來獲取注解里面的元數(shù)據(jù)
- Annotation(注解)是JDK5.0及以后版本引入的。它可以用于創(chuàng)建文檔,跟蹤代碼中的依賴性,甚至執(zhí)行基本編譯時檢查。從某些方面看,annotation就像修飾符一樣被使用,并應(yīng)用于包、類 型、構(gòu)造方法、方法、成員變量、參數(shù)、本地變量的聲明中

2.基本Annotation


<br> @Override: 限定重寫父類方法, 該注解只能用于方法
<br> @Deprecated: 用于表示某個程序元素(類, 方法等)已過時
<br> @SuppressWarnings: 抑制編譯器警告
<br> ```

3.自定義Annotation

  • 使用@interface定義Annotation
    - 使用Annotation修飾程序中的類、方法、變量、接口等定義,通常我們會把Annotation放在所有修飾符之前
    - 定義帶成員變量的Annotation
    - 為Annotation的成員變量指定初始值

4.提取Annotation信息

  • Annotation接口來代表程序元素前面的注釋,該接口是所有Annotation類型的父接口
    - AnnotatedElement接口代表程序中可以接受注釋的程序元素
    - 調(diào)用AnnotatedElement對象的如下三個方法來訪問Annotation信息:
    - getAnnotation(Class<T& annotationClass):返回該程序元素上存在的、指定類型的注釋,如果該類型的注釋不存在,則返回null
    - Annotation[] getAnnotations():返回該程序元素上存在的所有注釋
    - boolean isAnnotationPresent(Class<? extends Annotation& annotationClass):判斷該程序元素上是否包含指定類型的注釋,存在則返回true,否則返回false

5.Annotation 注解實例

自定義Annotation

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 定義一個注解
*/
@Target(ElementType.METHOD) // 這是一個對方法的注解,還可以是包、類、變量等很多東西
@Retention(RetentionPolicy.RUNTIME) // 保留時間,一般注解就是為了框架開發(fā)時代替配置文件使用,JVM運行時用反射取參數(shù)處理,所以一般都為RUNTIME類型
@Documented // 用于描述其它類型的annotation應(yīng)該被作為被標(biāo)注的程序成員的公共API,因此可以被例如javadoc此類的工具文檔化
public @interface OneAnnotation {
// 定義注解的參數(shù),類型可以為基本類型以及String、Class、enum、數(shù)組等,default為默認值
String parameter1() default "";
int parameter2() default -1;
}

使用注解

/**
* 一個用到了自定義的注解的類
*/
public class OClass {
@OneAnnotation(parameter1="YES", parameter2=10)
public void oneMethod () {
}
}

獲取注解參數(shù)

import java.lang.reflect.Method;
public class TestDemo {
public static void main(String[] args) throws Exception {
// 提取到被注解的方法Method,這里用到了反射的知識
Method method = Class.forName("OneClass").getDeclaredMethod("oneMethod");
// 從Method方法中通過方法getAnnotation獲得我們設(shè)置的注解
OneAnnotation oneAnnotation = method.getAnnotation(OneAnnotation.class);
// 得到注解的倆參數(shù)
System.out.println(oneAnnotation.parameter1());
System.out.println(oneAnnotation.parameter2());
}
}

初學(xué)(JAVA Annotation注解 高級階段) 難點: ★★★★★

希望每一篇文章都能夠?qū)ψx者們提供幫助與提升,這乃是每一位筆者的初衷

感謝您的閱讀 歡迎您的留言與建議

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號