日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 注解与反射_Java注解与反射直接上手

發布時間:2024/9/27 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 注解与反射_Java注解与反射直接上手 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是注解(Annotation)

注解顧名思義為注釋、講解,可以理解為一種標簽或標記,可以用在類、方法或者域上。向類、方法等添加注解,相當于給他們貼上了一層標簽。

注解使用

在使用注解時,在類名、方法名、域上直接用@+注解名即可。比如一個叫做MyAnnotation的注解:

1.類注解

在類A上添加@MyAnnotaion,即用MyAnnotation注解了類A。方法、域同理。

@MyAnnotation

public class A{

}

2.方法注解

用MyAnnotation注解了方法method()。

@MyAnnotation

public void method(){

//TODO

}

3.域注解。

用MyAnnotation注解了域a

public class A{

@MyAnnotation

int a; //域a

}

自定義注解

java給我們提供了很多注解,有時我們需要自定義的注解。自定義注解和接口定義很像,比如我們定義一個叫做MyAnnotation的注解,像下面這樣就定義好了。

public @interface MyAnnotation{

}

注解屬性

注解的作用不只是一個名字那么簡單,它可以包含許多屬性,即成員變量,就像一張標簽上可以寫很多東西一樣。所以可以在定義注解時添加各種屬性。

public @interface MyAnnotation{

int id();

String msg();

}

MyAnnotation注解中的id、msg就是它的屬性。可以看到定義屬性,和在接口中定義方法類似。

定義屬性過后,我們在使用注解時就可以加上屬性值。如下在注解類A時,聲明了屬性id=0,msg為hello:

@MyAnnotation(id = 0,msg = "hello")

class A{

}

--注意--:

1.在使用注解時,屬性都要賦值,如上面的id = 0,多個屬性用逗號(,)隔開。

2.定義注解時可以給屬性加上默認值,這樣可以在使用的時候不用賦值。定義默認值用default,如下定義連個屬性的默認值分別為1和“hi”

public @interface MyAnnotation{

int id() default 1;

String msg() default "hi";

}

3.如果一個注解內僅僅只有一個名字為 value 的屬性時,可以直接在括號內填寫屬性值,如:

public @interface MyAnnotation{

int value();

}

使用時可以不需要value = 0,直接填寫0,當然填寫value=0也是正確的。

@MyAnnotation(0)

class A{

}

反射(Reflaction)獲取注解

JAVA中反射是動態獲取信息以及動態調用對象方法的一種反射機制。就像我們看世間萬物,都是光反射進我們眼睛的結果,光反射是什么樣,我們看到的就是什么樣,為什么太空是黑的?就是因為太空沒有灰塵反光。

JAVA的反射也是同理,我們需要獲取類的信息時,就需要通過反射。注解的獲取同樣是通過反射。

獲取注解有幾個主要方法。

1.isAnnotationPresent()是否含有某個注解。

public boolean isAnnotationPresent(Class extends Annotation> annotationClass) {}

比如獲取類A是否有注解MyAnnotation,有返回true,沒有返回false。

boolean b = A.class.isAnnotationPresent(MyAnnotation.class);

2.getAnnotation()獲取某種注解對象。

public A getAnnotation(Class annotationClass) {}

比如獲取類A的注解對象。獲取到后我們就得到應用在類A時該注解的屬性值。

MyAnnotation m = A.class.getAnnotation(MyAnnotation.class);

int id = m.id();

String msg = m.msg();

3.getAnnotations()獲取應用的所有注解,結果存進數組。

public Annotation[] getAnnotations() {}

除了用類調用上述方法,我們還可以獲取到該類中的方法和域去調用。

假如類A有方法method(),有域a。

public class A{

int a;

public void myMethod(){

//TODO

}

}

1.獲取類方法,參數為方法名字符串。

Method method = A.class.getDeclaredMethod("myMethod");

2.獲取域

Field field = A.class.getDeclaredField("a");

總結

以上是生活随笔為你收集整理的java 注解与反射_Java注解与反射直接上手的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。