Java -- 注解 annotation
生活随笔
收集整理的這篇文章主要介紹了
Java -- 注解 annotation
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.
從 JDK 5.0 開始, Java 增加了對(duì)元數(shù)據(jù)(MetaData) 的支持, 也就是 Annotation(注解)。 什么是Annotation,以及注解的作用?三個(gè)基本的 Annotation: ?@Override: 限定重寫父類方法, 該注解只能用于方法 ?@Deprecated: 用于表示某個(gè)程序元素(類, 方法等)已過時(shí) ?@SuppressWarnings: 抑制編譯器警告. Annotation 其實(shí)就是代碼里的特殊標(biāo)記, 它用于替代配置文件,也就是說,傳統(tǒng)方式通過配置文件告訴類如何運(yùn)行,有了注解技術(shù)后,開發(fā)人員可以通過注解告訴類如何運(yùn)行。在Java技術(shù)里注解的典型應(yīng)用是:可以通過反射技術(shù)去得到類里面的注解,以決定怎么去運(yùn)行類。 ? 定義新的 Annotation 類型使用 @interface 關(guān)鍵字 聲明注解的屬性 ?注解屬性的作用:原來寫在配置文件中的信息,可以通過注解的屬性進(jìn)行描述。 ?Annotation 的屬性聲明方式:String name(); ?屬性默認(rèn)值聲明方式:String name() default “xxx”; ?特殊屬性value:如果注解中有一個(gè)名稱value的屬性,那么使用注解時(shí)可以省略value=部分,如@MyAnnotation(“xxx") ?特殊屬性value[]; 元 Annotation指修飾Annotation的Annotation。JDK中定義了如下元Annotation:@Retention: 只能用于修飾一個(gè) Annotation 定義, 用于指定該 Annotation 可以保留的域, @Rentention 包含一個(gè) RetentionPolicy 類型的成員變量, 通過這個(gè)變量指定域。
RetentionPolicy.CLASS: 編譯器將把注解記錄在 class 文件中. 當(dāng)運(yùn)行 Java 程序時(shí), JVM 不會(huì)保留注解. 這是默認(rèn)值
RetentionPolicy.RUNTIME:編譯器將把注釋記錄在 class 文件中. 當(dāng)運(yùn)行 Java 程序時(shí), JVM 會(huì)保留注解. 程序可以通過反射獲取該注釋
RetentionPolicy.SOURCE: 編譯器直接丟棄這種策略的注釋
@Target:指定注解用于修飾類的哪個(gè)成員. @Target 包含了一個(gè)名為 value,類型為ElementType的成員變量。
@Documented: 用于指定被該元 Annotation 修飾的 Annotation 類將被 javadoc 工具提取成文檔.
@Inherited: 被它修飾的 Annotation 將具有繼承性.如果某個(gè)類使用了被 @Inherited 修飾的 Annotation, 則其子類將自動(dòng)具有該注解.
Demo1
@SuppressWarnings("unchecked") public class Demo1 {@SuppressWarnings("unchecked") private List list;@SuppressWarnings("unchecked")public Demo1(@SuppressWarnings("unchecked") List list) {super();this.list = list;}@Overridepublic boolean equals(Object obj) {// TODO Auto-generated method stubreturn super.equals(obj);}@Deprecatedpublic void doxx(){}public void doyy(){}@SuppressWarnings("unchecked")public void dozz(){List list = new ArrayList();System.out.println(list);}@MyAnnotation(name="老張",age=37,gender=Gender.MALE,clazz=String.class,my2=@MyAnnotation2(name="xxx"),arr={2,3,4},gs={Gender.FEMALE,Gender.MALE})public void doaa(){}//名稱為value且只有一個(gè)的屬性可以直接賦值@MyAnnotation3(value={"bb"})public void dobb(){} }自定義注解 MyAnnotation
public @interface MyAnnotation {//注解可以使用如下類型配置注解包含的信息String name();String password() default "123";double age() default 12;Gender gender() default Gender.FEMALE;Class clazz();MyAnnotation2 my2();int[] arr() default {1,2,3};Gender[] gs();}
Demo2, 先反射方法,再從注解獲得參數(shù),再執(zhí)行方法
被注解的方法
public class JdbcUtils {@DbInfo(url="jdbc:mysql://localhost:3306/test",username="flx",password="root")public static Connection getConnection(String url,String username,String password){System.out.println(url);System.out.println(username);System.out.println(password);return null;}@DbInfo(url="jdbc:mysql://localhost:3306/test",username="flx",password="root")public void aa(){} }自定義的注解,注意 要有元注解 @Retention
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) @Inherited public @interface DbInfo {String url() default "jdbc:mysql://localhost:3306/test";String username() default "root";String password() default "root";}
?
轉(zhuǎn)載于:https://www.cnblogs.com/xj626852095/p/3648028.html
總結(jié)
以上是生活随笔為你收集整理的Java -- 注解 annotation的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中empty(), is_null
- 下一篇: wamp2.2-64位 localhos