国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java 自定義注解及利用反射讀取注解的實(shí)例

Java 自定義注解及利用反射讀取注解的實(shí)例

2020-12-23 13:25lzh984294471 Java教程

下面小編就為大家?guī)硪黄狫ava 自定義注解及利用反射讀取注解的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

一、自定義注解

元注解: 

@interface注解: 定義注解接口

@Target注解: 用于約束被描述的注解的使用范圍,當(dāng)被描述的注解超出使用范圍則編譯失敗。如:ElementType.METHOD,ElementType.TYPE;

@Retention 注解:用于約束被定義注解的作用范圍,作用范圍有三個(gè):

1、RetentionPolicy.SOURCE:作用范圍是源碼,作用于Java文件中,當(dāng)執(zhí)行javac時(shí)去除該注解。

2、RetentionPolicy.CLASS:作用范圍是二進(jìn)制碼,就是存在于class文件中,當(dāng)執(zhí)行Java時(shí)去除該注解。

3、RetentionPolicy.RUNTIME:作用范圍為運(yùn)行時(shí),就是我們可以通過動(dòng)態(tài)獲取該注釋。

@Documented:用于指定javadoc生成API文檔時(shí)顯示該注釋。

@Inherited用于指定被描述的注釋可以被其描述的類的子類繼承,默認(rèn)情況是不能被其子類繼承。

自定義注解接口:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.java.annotation;
 
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Target({ElementType.METHOD,ElementType.TYPE})
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Annotation_my {
 
 String name() default "張三";//defalt 表示默認(rèn)值
 
 String say() default "hello world";
 
 int age() default 21;
 
}

接下來我們定義一個(gè)接口:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.java.annotation;
 
@Annotation_my //使用我們剛才定義的注解
public interface Person {
 
 @Annotation_my
 public void name();
 
 @Annotation_my
 public void say();
 
 @Annotation_my
 public void age();
 
}

接口定義好了,我們就可以寫接口的實(shí)現(xiàn)類了(接口不能實(shí)例化)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.java.annotation;
 
@Annotation_my
@SuppressWarnings("unused")
public class Student implements Person {
 
 private String name;
 
 @Override
 @Annotation_my(name="流氓公子") //賦值給name 默認(rèn)的為張三
//在定義注解時(shí)沒有給定默認(rèn)值時(shí),在此處必須name賦初值
 public void name() {
  
 }
 
 
 @Override
 @Annotation_my(say=" hello world !")
 public void say() {
  
 }
 
 @Override
 @Annotation_my(age=20)
 public void age() {
  
 }
}

然后我們就編寫一個(gè)測(cè)試類測(cè)試我們的注解

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.java.annotation;
 
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
 
public class Text {
 Annotation[] annotation = null;
 
 public static void main(String[] args) throws ClassNotFoundException {
  new Text().getAnnotation();
 }
 
 public void getAnnotation() throws ClassNotFoundException{
  Class<?> stu = Class.forName("com.java.annotation.Student");//靜態(tài)加載類
  boolean isEmpty = stu.isAnnotationPresent(com.java.annotation.Annotation_my.class);//判斷stu是不是使用了我們剛才定義的注解接口if(isEmpty){
   annotation = stu.getAnnotations();//獲取注解接口中的
   for(Annotation a:annotation){
    Annotation_my my = (Annotation_my)a;//強(qiáng)制轉(zhuǎn)換成Annotation_my類型
    System.out.println(stu+":\n"+my.name()+" say: "+my.say()+" my age: "+my.age());
   }
  }
  Method[] method = stu.getMethods();//
  System.out.println("Method");
  for(Method m:method){
   boolean ismEmpty = m.isAnnotationPresent(com.java.annotation.Annotation_my.class);
   if(ismEmpty){
    Annotation[] aa = m.getAnnotations();
    for(Annotation a:aa){
     Annotation_my an = (Annotation_my)a;
     System.out.println(m+":\n"+an.name()+" say: "+an.say()+" my age: "+an.age());
    }
   }
  }
  //get Fields by force
  System.out.println("get Fileds by force !");
  Field[] field = stu.getDeclaredFields();
  for(Field f:field){
   f.setAccessible(true);
   System.out.println(f.getName());
  }
  System.out.println("get methods in interfaces !");
  Class<?> interfaces[] = stu.getInterfaces();
  for(Class<?> c:interfaces){
   Method[] imethod = c.getMethods();
   for(Method m:imethod){
    System.out.println(m.getName());
   }
  }
 }
 
}

以上這篇Java 自定義注解及利用反射讀取注解的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.cnblogs.com/lzh984294471/p/4959953.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 精品在线一区二区 | 不用播放器的毛片 | 日韩高清中文字幕 | 日韩av成人在线观看 | 黄色毛片免费视频 | 福利久久 | 欧美成人一区二免费视频软件 | 精品亚洲一区二区 | 久久久一区二区 | 福利在线观看视频 | 亚洲天堂网站 | 久久久国产精品一区 | 中文字幕一区二区在线观看 | 成人欧美一区二区三区在线播放 | 亚洲成人第一网站 | 亚洲午夜一区 | 91精品欧美久久久久久动漫 | 成人免费黄色毛片 | 国产精品自产拍在线观看 | 一区二区三区欧美 | 国产资源在线观看视频 | 亚洲天堂一区二区 | 久久久天堂国产精品 | 不用播放器看av | 午夜电影网站 | 宅男lu666噜噜噜在线观看 | 日韩一区二区三区电影在线观看 | 九九热精品在线 | 少妇精品久久久久久久久久 | 久久久九色 | 日韩在线电影 | 日韩视频在线观看 | 色爱综合网 | 国产片在线观看 | 激情综合网站 | 欧美一级二级三级视频 | 亚洲精品二区 | 国产一区二区三区在线视频观看 | 一级一片免费视频 | 五月婷综合| 九九久久九九 |