最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java注解(annotation)簡(jiǎn)述

 更新時(shí)間:2021年08月31日 10:35:42   作者:劉瑜澄  
這篇文章主要介紹了使用java的注解(用在java類(lèi)的方法上的注解)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Java注解(annotation)簡(jiǎn)單上手

反射reflect:http://www.fzitv.net/article/221282.htm

1、什么是注解?

注解就像商場(chǎng)的商品上都貼有自己的標(biāo)簽一樣,它提供了關(guān)于這個(gè)商品的許多額外信息。你可以根據(jù)這些信息對(duì)其進(jìn)行附加的處理。

“打上標(biāo)簽” 以后,框架就可以利用Java的反射能力,掃描、獲取各Class/Method/Field上的注解,據(jù)此對(duì)其進(jìn)行額外的處理。

2、java內(nèi)置注解

java中有一些java原生就定義的注解,像@Override

注解可以輔助反射機(jī)制,例如幫助我們快速篩選在反射中操作的目標(biāo),它在如今流行的框架中被大量使用

java內(nèi)置了一些注解,有些是輔助編譯器一起編譯時(shí)做驗(yàn)證使用,下面兩個(gè)注解就是java內(nèi)置的注解,他們用于為我們定義的注解指定某些特性:

@Target
用于指定我們定義的注解可以被應(yīng)用在哪里,具體的位置被枚舉類(lèi)型ElementType定義,例如:
     TYPE:在類(lèi)上可以使用當(dāng)前注解,即只能標(biāo)注在類(lèi)上
     METHOD:在方法上可以使用當(dāng)前注解,即只能標(biāo)注在方法上
     FIELD:在屬性上可以使用當(dāng)前注解,即只能標(biāo)注在屬性上
     還有一些其他,可參見(jiàn)API手冊(cè)
@Retention
用于我們定義的注解的保留級(jí)別
      RetentionPolice.RUNTIME:最常用,保留在字節(jié)碼文件中且在該類(lèi)運(yùn)行時(shí)可被反射機(jī)制利用
      RetentionPolice.CLASS:保留在字節(jié)碼中,但是反射機(jī)制不可用,如若不寫(xiě)默認(rèn)@Retention就是該級(jí)別
      RetentionPolice.SOURCE:保留在源碼中

3、注解的基本運(yùn)

創(chuàng)建注解

在這里插入圖片描述

創(chuàng)建兩個(gè)注解類(lèi)AutoRunClass和TestMethod

/*
    @Target()可以指定在哪使用這個(gè)注解
    這個(gè)表示是給類(lèi)(Type)使用的注解,表示只能在類(lèi)上使用,不能在其他地方使用
    @Target({ElementType.TYPE,ElementType.FIELD})也可以使用數(shù)組的方式使用多個(gè)
 */
@Target(ElementType.TYPE)
//保留級(jí)別
@Retention(RetentionPolicy.RUNTIME)

public @interface AutoRunClass {//這個(gè)注解的作用于篩選類(lèi)
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestMethod {//這個(gè)注解的作用于篩選方法
    /*
        注解里可以定義參數(shù),格式:
        類(lèi)型 參數(shù)名()
        注意:如果當(dāng)前注解只有一個(gè)參數(shù)時(shí),通常參數(shù)名叫value

        當(dāng)我們定義了參數(shù),那么在使用當(dāng)前注釋時(shí)需要為參數(shù)指定值,格式:
        @注解名(參數(shù)1=參數(shù)值1,參數(shù)1=參數(shù)值1,...)
        參數(shù)指定的順序可以與注解中定義的順序不一樣

        例如:
        @TestMethod(5)
        注:上述注解沒(méi)有指定參數(shù)名的原因是該注解只有一個(gè)參數(shù),并且參數(shù)名叫value
        即:int value();

        如果該參數(shù)定義時(shí)為:int sum();
        那么使用注解時(shí)要寫(xiě)成:@TestMethod(sum=5)
        
        注:使用default可以初始化定義值
     */
    int value() default 1;
}

創(chuàng)建一個(gè)實(shí)體類(lèi)Person,在其中使用注解標(biāo)識(shí)類(lèi)和方法

package reflect_text;

/**
 * 用于測(cè)試反射-注解機(jī)制
 */
@AutoRunClass//-----------------------
public class Person {
    private String name = "劉瑜澄";
    private int age = 22;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //有了初始值,加不加參數(shù)都可以
    @TestMethod//-----------------------
    public void sayHi() {
        System.out.println(name + "Hi!!!");
    }

    @TestMethod(3)//-----------------------
    public void sayHello() {
        System.out.println(name + "大家好!");
    }

    @TestMethod(5)//-----------------------
    public void sayGoodBye() {
        System.out.println(name + "再見(jiàn)!");
    }

    public void say(String info) {
        System.out.println(name + ":" + info);
    }

    public void say(String info, int sum) {
        for (int i = 0; i < sum; i++) {
            System.out.println(name + ":" + info);
        }
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

使用注解

要求判斷Person是否被AutoRunClass注解修飾,如果是則遍歷Person中所有方法,遍歷判斷這些方法是否被TestMethod注解修飾,是則根據(jù)注解傳入的參數(shù)去遍歷執(zhí)行該方法。

如果對(duì)反射不是很了解,可以看看http://www.fzitv.net/article/221282.htm

		//加載Person的類(lèi)對(duì)象
        Class cls = Class.forName("reflect_text.Person");

        /*
            boolean isAnnotationPresent(Class annoCls)
            檢查是否又被annoCls指定的注解修飾
         */
        if (cls.isAnnotationPresent(AutoRunClass.class)) {
            System.out.println(cls.getName() + "被AutoRunClass注解修飾");
            //實(shí)例化
            Object obj = cls.newInstance();
            //掃描當(dāng)前類(lèi)定義的所有方法
            Method[] methods = cls.getDeclaredMethods();
            for (Method method : methods) {
                if (method.isAnnotationPresent(TestMethod.class)) {
                    System.out.println(method.getName()+"被TestMethod注解修飾");
                    //通過(guò)getAnnotation方法獲取method方法上的注解@TestMethod
                    TestMethod tm = method.getAnnotation(TestMethod.class);
                    //調(diào)用其參數(shù)名,獲取注解 參數(shù)value的值
                    int sum = tm.value();
                    //然后根據(jù)注解傳入的參數(shù)重復(fù)調(diào)用該方法
                    for (int i = 0; i < sum; i++) {
                        method.invoke(obj);
                    }
                }else{
                    System.out.println(method.getName() + "不被@TestMethod注解修飾");
                }
            }
        } else {
            System.out.println(cls.getName() + "沒(méi)有被AutoRunClass注解修飾");
        }

在這里插入圖片描述

總結(jié)

本片文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java DefaultListableBeanFactory接口超詳細(xì)介紹

    Java DefaultListableBeanFactory接口超詳細(xì)介紹

    這篇文章主要介紹了Java DefaultListableBeanFactory接口,DefaultListableBeanFactory是整個(gè)bean加載的核心部分,是Spring注冊(cè)機(jī)加載bean的默認(rèn)實(shí)現(xiàn)
    2022-11-11
  • Maven分模塊開(kāi)發(fā)執(zhí)行指令失敗的問(wèn)題

    Maven分模塊開(kāi)發(fā)執(zhí)行指令失敗的問(wèn)題

    Maven分模塊開(kāi)發(fā),行指令失敗,modules.module[3]‘ specifies duplicate child module maven_dao @ line 29, column 1的問(wèn)題,本文給大家分享解決方法,感興趣的朋友跟隨小編一起看看吧
    2020-09-09
  • Spring Boot教程之利用ActiveMQ實(shí)現(xiàn)延遲消息

    Spring Boot教程之利用ActiveMQ實(shí)現(xiàn)延遲消息

    這篇文章主要給大家介紹了關(guān)于Spring Boot教程之利用ActiveMQ實(shí)現(xiàn)延遲消息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • IDEA中request.getParameter爆紅問(wèn)題及解決

    IDEA中request.getParameter爆紅問(wèn)題及解決

    這篇文章主要介紹了IDEA中request.getParameter爆紅問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java基礎(chǔ)的詳細(xì)了解第二天

    java基礎(chǔ)的詳細(xì)了解第二天

    這篇文章對(duì)Java編程語(yǔ)言的基礎(chǔ)知識(shí)作了一個(gè)較為全面的匯總,在這里給大家分享一下。需要的朋友可以參考,希望能給你帶來(lái)幫助
    2021-08-08
  • WebUploader實(shí)現(xiàn)圖片上傳功能

    WebUploader實(shí)現(xiàn)圖片上傳功能

    這篇文章主要為大家詳細(xì)介紹了WebUploader實(shí)現(xiàn)圖片上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 詳解微信開(kāi)發(fā)之Author網(wǎng)頁(yè)授權(quán)

    詳解微信開(kāi)發(fā)之Author網(wǎng)頁(yè)授權(quán)

    微信開(kāi)發(fā)中,經(jīng)常有這樣的需求:獲得用戶(hù)頭像、綁定微信號(hào)給用戶(hù)發(fā)信息,那么實(shí)現(xiàn)這些的前提就是授權(quán)!本文對(duì)此進(jìn)行系統(tǒng)介紹,需要的朋友一起來(lái)看下吧
    2016-12-12
  • Java壓縮文件工具類(lèi)ZipUtil使用方法代碼示例

    Java壓縮文件工具類(lèi)ZipUtil使用方法代碼示例

    這篇文章主要介紹了Java壓縮文件工具類(lèi)ZipUtil使用方法代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • 一文帶你吃透JSP增刪改查實(shí)戰(zhàn)案例詳細(xì)解讀

    一文帶你吃透JSP增刪改查實(shí)戰(zhàn)案例詳細(xì)解讀

    這篇文章主要為大家詳細(xì)介紹了JSP中增刪改查實(shí)戰(zhàn)案例的相關(guān)知識(shí),文中的示例代碼講解現(xiàn)象,具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-03-03
  • Java中對(duì)象的序列化詳解及實(shí)例

    Java中對(duì)象的序列化詳解及實(shí)例

    這篇文章主要介紹了 Java中對(duì)象的序列化詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論

福州市| 岗巴县| 上杭县| 醴陵市| 乳山市| 和林格尔县| 垣曲县| 南华县| 上饶县| 水城县| 依安县| 青河县| 泾阳县| 新民市| 汉中市| 巴林右旗| 桐梓县| 朝阳县| 祁东县| 买车| 巴东县| 宜宾市| 香河县| 伊春市| 闽侯县| 盐城市| 藁城市| 西乡县| 安多县| 新干县| 建阳市| 泾源县| 天等县| 长治市| 金沙县| 桐乡市| 西峡县| 江都市| 黔江区| 滦平县| 通山县|