成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java注解初步學(xué)習(xí)

KnewOne / 2623人閱讀

摘要:定義注解,也叫元數(shù)據(jù)。它可以聲明在包類字段方法局部變量方法參數(shù)等的前面,用來對(duì)這些元素進(jìn)行說明,注釋。方法返回該程序元素上存在的所有注解。與此接口中的其他方法不同,該方法將忽略繼承的注釋。

定義:
注解(Annotation),也叫元數(shù)據(jù)。一種代碼級(jí)別的說明。它是JDK5.0及以后版本引入的一個(gè)特性,與類、接口、枚舉是在同一個(gè)層次。
它可以聲明在包、類、字段、方法、局部變量、方法參數(shù)等的前面,用來對(duì)這些元素進(jìn)行說明,注釋。(“java注解”百度百科)

作用分類:
①編寫文檔:通過代碼里標(biāo)識(shí)的元數(shù)據(jù)生成文檔
②代碼分析:通過代碼里標(biāo)識(shí)的元數(shù)據(jù)對(duì)代碼進(jìn)行分析
③編譯檢查:通過代碼里標(biāo)識(shí)的元數(shù)據(jù)讓編譯器能過實(shí)現(xiàn)基本的編譯檢查

元注解:
元注解的作用就是注解其他注解。java5.0定義了4個(gè)標(biāo)準(zhǔn)的meta-annotation類型,用以對(duì)其他的annotation類型做說明,他們分別是:

@Target:
說明了Annotation所修飾的對(duì)象的作用:用戶描述注解的使用范圍(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
 1.CONSTRUCTOR:用于描述構(gòu)造器
 2.FIELD:用于描述域
 3.LOCAL_VARIABLE:用于描述局部變量
 4.METHOD:用于描述方法
 5.PACKAGE:用于描述包
 6.PARAMETER:用于描述參數(shù)
 7.TYPE:用于描述類、接口(包括注解類型) 或enum聲明

@Retention:
作用:表示需要在什么級(jí)別保存該注釋信息,用于描述注解的生命周期(即:被描述的注解在什么范圍內(nèi)有效)
取值(RetentionPolicy)
1.SOURCE:在源文件中有效
2.CLASS:在class文件中有效
3.RUNTIME:在運(yùn)行時(shí)有效
取RUNTIME時(shí),注解處理器可以通過反射,獲取到該注解的屬性值,做一些運(yùn)行時(shí)的邏輯處理。

@Documented:
這是一個(gè)標(biāo)記注解
用于描述其它類型的annotation應(yīng)該被作為標(biāo)注的程序成員的公共api,可以文檔化

@Inherited:
標(biāo)記注解
用該注解修飾的注解,會(huì)被子類繼承。

自定義注解:

使用@interface來聲明一個(gè)注解。其中的每一個(gè)方法實(shí)際上是聲明了一個(gè)配置參數(shù)。方法的名稱就是參數(shù)的名稱。返回值的類型就是參數(shù)的類型。(返回值只能是基本類型、class、String、enum),可以用default來聲明參數(shù)的默認(rèn)值.

格式
public @interface 注解名 {定義體}
注解參數(shù)支持的數(shù)據(jù)類型:
1.所有基本數(shù)據(jù)類型(int,float,boolean,byte,double,char,long,short)
2.String類型
3.Class類型
4.enum類型
5.Annotation類型
6.以上所有類型的數(shù)組
只能用public或者default這兩個(gè)訪問權(quán)修飾.注解元素必須有確定的默認(rèn)值,要么在定義的時(shí)候指定,要么在使用的時(shí)候指定。

例子:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//用于描述域
@Target(ElementType.FIELD)
// 運(yùn)行是有效
@Retention(RetentionPolicy.RUNTIME)
public @interface Student {
    public enum Sex {
        MAN, WOMAN
    }

    /**
     * 1.參數(shù)成員只能用基本類型String,Enum,Class,annotations等數(shù)據(jù)類型,以及這一些類型的數(shù)組
     * 2.只能用public或默認(rèn)(default)這兩個(gè)訪問權(quán)修飾. 3.如果只有一個(gè)參數(shù)成員,最好把參數(shù)名稱設(shè)為"value"
     */
    String name() default "";

    // public修飾
    public int age() default 18;

    public Sex sex() default Sex.MAN;

}

注解處理器

這是一個(gè)自己編寫的工具類,通過注解處理器對(duì)程序元素中的注解進(jìn)行操作。
獲得Annotation信息的方法:
方法1: T getAnnotation(Class annotationClass): 返回改程序元素上存在的、指定類型的注解,如果該類型注解不存在,則返回null。

方法2:Annotation[] getAnnotations():返回該程序元素上存在的所有注解。

方法3:boolean is AnnotationPresent(Annotation):判斷該程序元素上是否包含指定類型的注解,存在則返回true,否則返回false.

方法4:Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注釋。與此接口中的其他方法不同,該方法將忽略繼承的注釋。(如果沒有注釋直接存在于此元素上,則返回長度為零的一個(gè)數(shù)組。)該方法的調(diào)用者可以隨意修改返回的數(shù)組;這不會(huì)對(duì)其他調(diào)用者返回的數(shù)組產(chǎn)生任何影響。

    public class StudentInfoUtil {

    public static void getStudentInfo(Class clazz) {
        // 獲取程序?qū)ο笏械腇ield注釋
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            // 判斷是否為Student注釋
            if (field.isAnnotationPresent(Student.class)) {
                // 獲取Annotation對(duì)象
                Student student = field.getAnnotation(Student.class);
                System.out.println("姓名" + student.name() + "年齡" + student.age()
                        + "性別" + student.sex());
            }
        }
    }

}

下面寫個(gè)實(shí)例看它怎么用,先寫一個(gè)student實(shí)體bean

public class StudentBean {

    private String name;
    private int age;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

}

再寫個(gè)測(cè)試

   public class Test {
    @Student(name = "Snail", age = 18, sex = Sex.MAN)
    private StudentBean student01;
    @Student(name = "Snail2", age = 19, sex = Sex.MAN)
    private StudentBean student02;

    public static void main(String[] args) {
        StudentInfoUtil.getStudentInfo(Test.class);
    }

}

輸出如下:

姓名Snail年齡18性別MAN
姓名Snail2年齡19性別MAN

可以看到,這里注解可以省去重復(fù)聲明賦值的麻煩。

參考
深入理解Java:注解(Annotation)自定義注解入門
深入理解Java:注解(Annotation)--注解處理器

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64177.html

相關(guān)文章

  • Java深入-框架技巧

    摘要:從使用到原理學(xué)習(xí)線程池關(guān)于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實(shí)現(xiàn)在軟件開發(fā)中,分散于應(yīng)用中多出的功能被稱為橫切關(guān)注點(diǎn)如事務(wù)安全緩存等。 Java 程序媛手把手教你設(shè)計(jì)模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經(jīng)風(fēng)雨慢慢變老,回首走過的點(diǎn)點(diǎn)滴滴,依然清楚的記得當(dāng)初愛情萌芽的模樣…… Java 進(jìn)階面試問題列表 -...

    chengtao1633 評(píng)論0 收藏0
  • spring boot 初步學(xué)習(xí)

    摘要:跟兩年前寫和配置相關(guān)的文件相比,這真是十分的簡單了??梢栽囍鴮懸粋€(gè)小小的,有很多視頻教程跟著一步步做就成,我是跟著慕課網(wǎng)上的視頻學(xué)習(xí)的。對(duì)于寫快一年的我來說初學(xué)這個(gè)還是很欣喜的。 環(huán)境配置 Mac 上搭建 java 開發(fā)環(huán)境http://starzhou.com/blogs/jav... 初始化項(xiàng)目 參考鏈接http://start.spring.io/ 從此鏈接中輸入項(xiàng)目名,并選擇相...

    fancyLuo 評(píng)論0 收藏0
  • SSM學(xué)習(xí)系列(二)Spring對(duì)象

    摘要:初步使用注入對(duì)象沿用上次的工程新建兩個(gè)類和修改其中用來標(biāo)記注入,將注入到中執(zhí)行結(jié)果如下采用注解方式注入對(duì)象修改和,加入注解,并賦予默認(rèn)值為類加上注解,即表明此類是為類加上注解,即表明此類是修改,刪除所有子標(biāo)簽,加入自動(dòng)掃描執(zhí)行結(jié)果 Spring初步使用 注入對(duì)象 沿用上次的工程新建兩個(gè)類Category和Product Category.java public class Catego...

    JerryC 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<