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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

注解的实现

發布時間:2023/12/3 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 注解的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.概念

注解表示一個標識(標注、標記),它可以用在類上、方法上、變量上等,給類的各個組成部分一些額外的表示,能夠被編譯器識別。

2.常見注解

@Override: 描述一個方法是復寫的父類方法
@Deprecate: 描述一個方法是過時的方法,調用過時的方法會有一個橫線
@SuppressWarnings(value = “all”): 壓制警告:寫在類上,則壓制整個類的警告,在方法上則壓制方法上的警告

3.自定義注解

【在使用注解的時候如果注解里面的屬性沒有指定默認值,那么我們就需要手動給出注解屬性的設置值。】

public @interface Anno {//定義一個基本類型的屬性//public屬性類型屬性名() default 默認值;int a() default 23 "張三";//定義一個String類型的屬性public String name() default 23;//定義一個class類型的屬性public Class clazz() default Anno2.class;//定義一個注解類型的屬性public Anno2 anno() default @Anno2;//定義一個枚舉類型的屬性public Week week() default Week.Monday;//以上類型的一維數組//int 數組public int [] arr() default {1,2,3,4,5}//枚舉數組public Week[] weeks() default{Week.Monday}public String value();//特殊屬性value 變量只有一個,則使用時可以省略名稱直接賦值 }//類上使用注解 //在使用注解的時候如果注解里面的屬性沒有指定默認值,那么我們就需要手動給出注解屬性的設置值。 //此處相當于Anno的對象,只是給類或者方法添加了一個標簽,不會影響實體 @Anno("李四") public class Demo1 {public static void main(String[] args) {} }
4.元注解

@Target:指定了注解能在哪里使用【成員變量、類、方法】
@Retention:可以理解為保留時間(生命周期)
@lnherited:表示修飾的自定義注解可以被子類繼承
@Documented:表示該自定義注解,會出現在API文檔里面

//定義特殊屬性value @Retention(RetentionPolicy.RUNTIME) //注解在運行時期有效 @Target(ElementType.TYPE)//注解可以使用在類上 //@Target(ElementType.METHOD)//注解可以使用在方法上 //@Target(ElementType.FIELD)//注解可以使用在成員變量上 @Inherited//表示修飾的自定義注解可以被子類繼承 public @interface Anno { }//測試類 public class Demo2 {public static void main(String[] args) throws ClassNotFoundException {//得到類的字節碼對象Class<?> personClazz = Class.forName("com.itheima3.Person");//getAnnotation(Anno.class);得到該類的注解對象Anno a1 = personClazz.getAnnotation(Anno.class);Class<?> studentClazz = Class.forName("com.itheima3.Student");Anno a2 = personClazz.getAnnotation(Anno.class);System.out.println(a1==a2);} }打印結果 true
5.自定義注解實現

測試讓有注解的方法執行,沒有Test的方法不執行

//自定義注解 //元注解[對注解進一步進行說明] @Target(ElementType.METHOD)//指定注解可以用在哪些地方 @Retention(RetentionPolicy.RUNTIME)//表示注解的存活時間可以到運行 //定義一個注解 public @interface Test { }//方法類 public class UseTest {//沒有使用Test注解public void show(){System.out.println("UseTest....show....");}//使用Test注解@Testpublic void method(){System.out.println("UseTest....method....");}//使用Test注解@Testpublic void function(){System.out.println("UseTest....function....");} }//測試類 //測試讓有注解的方法執行,沒有Test的方法不執行 public class AnnoDemo {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {//通過反射獲取UseTest的字節碼文件對象Class<?> clazz = Class.forName("com.itheima2.UseTest");//2.通過反射獲取這個類里面所有方法的對象Method[] methods = clazz.getDeclaredMethods();//創建對象用于執行方法Object o = clazz.getConstructor().newInstance();//遍歷數組,得到每一個方法對象for (Method method : methods) {//getAnnotation(Test.class)返回原方法上額外的注解Test test = method.getAnnotation(Test.class);//如果有注解,就執行if (test != null) {//注解沒有設置存活時間,則打印無結果method.invoke(o);}//method.isAnnotationPresent(Test.class)判斷方法上是否有注解,有則返回true/*if(method.isAnnotationPresent(Test.class)){method.invoke(o);}*/}} }打印結果: ------------------------------------------------------------------------------- UseTest....method.... UseTest....function....

總結

以上是生活随笔為你收集整理的注解的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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