国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《Java-SE-第三十八章》之注解

這篇具有很好參考價(jià)值的文章主要介紹了《Java-SE-第三十八章》之注解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

在你立足處深挖下去,就會(huì)有泉水涌出!別管蒙昧者們叫嚷:“下邊永遠(yuǎn)是地獄!”

博客主頁:KC老衲愛尼姑的博客主頁

博主的github,平常所寫代碼皆在于此

共勉:talk is cheap, show me the code

作者是爪哇島的新手,水平很有限,如果發(fā)現(xiàn)錯(cuò)誤,一定要及時(shí)告知作者哦!感謝感謝!



注解

概述

Java注解是Java5引入的一種注釋解釋,又稱之為標(biāo)注。Java中的類,構(gòu)造器,方法,成員變量,參數(shù)等都可以被注解進(jìn)行標(biāo)注。我們可以將注解理解為標(biāo)簽,標(biāo)簽可以上的內(nèi)容可以自由的定義,它是對(duì)人和事物屬性的評(píng)價(jià)。這就如商品上的價(jià)格標(biāo)簽,圖書館中的書本編碼標(biāo)簽,B站上游戲分區(qū)標(biāo)簽等。

注解的作用

對(duì)Java中類,方法,成員變量做標(biāo)記,然后進(jìn)行特殊處理,至于到底進(jìn)行何種處理由具體業(yè)務(wù)決定。比如說:JUnit框架中,標(biāo)注了注解為@Test的方法就可以被當(dāng)成測(cè)試方法執(zhí)行,而沒有標(biāo)記的就不能打算當(dāng)初當(dāng)成測(cè)試方法執(zhí)行。

特殊屬性

  • value屬性,如果只有一個(gè)value屬性的情況下,使用value屬性的時(shí)候可以省略value名稱不寫。
  • 但是如果有多個(gè)屬性,并且屬性沒有默認(rèn)值,那么value名稱不能省略。

自定義注解格式

public @interface 注解名稱 {

? public 屬性類型 屬性名() default 默認(rèn)值;

}

代碼示例

public @interface MyDemo {
    String value();
    String name();
    boolean flag() default true;
    String [] str();
}

元注解

元注解就是注解的注解,注解的標(biāo)簽。

常用的元注解

  1. @Target: 約束自定義注解只能在哪些地方使用
  2. @Retention:申明注解的生命周期

@Target中可使用的值定義在枚舉類ElementType中,常用值如下:

  • TYPE,類
  • 接口 FIELD,
  • 成員變量METHOD,
  • 成員方法PARAMETER,
  • 方法參數(shù)CONSTRUCTOR,
  • 構(gòu)造器LOCAL_VARIABLE
  • 局部變量

@Retention中可使用的值定義在枚舉類ElementType中,常用值如下:

  • SOURCE: 注解只作用在源碼階段,生成的字節(jié)碼文件中不存在
  • CLASS: 注解作用在源碼階段,字節(jié)碼文件階段,運(yùn)行階段不存在,默認(rèn)值.
  • RUNTIME:注解作用在源碼階段,字節(jié)碼文件階段,運(yùn)行階段(開發(fā)常用)

注解的解析

示例代碼

@Target({ElementType.TYPE,ElementType.METHOD})// 當(dāng)前被修飾的注解只能用在類上,方法上。
@Retention(RetentionPolicy.RUNTIME)// 控制下面的注解一直保留到運(yùn)行時(shí)
public @interface  MyTest {
}

MyTest的使用

@MyTest
public class AnnotationTest {
//    @MyTest
//    private String name;

    @MyTest
    @MyDemo(value = "Annotation",name="張三",str={"java","C++"})
    public static void test() {
        System.out.println("Hello World");
    }

    public static void main(String[] args) {
        test();
    }
}

如果把@MyTest修飾在成員變量上就會(huì)報(bào)錯(cuò)—>java: 注釋類型不適用于該類型的聲明

注解的解析

注解的操作中經(jīng)常需要解析,注解的解析就是判斷是否存下注解,存在注解就解析出內(nèi)容。

與注解解析相關(guān)的接口

  • Annotation: 注解的頂級(jí)接口,注解都是Annotation類型的對(duì)象
  • AnnotatedElement:該接口定義了與注解解析相關(guān)的解析方法

相關(guān)API如下

方法 說明
Annotation[] getDeclaredAnnotations() 獲得當(dāng)前對(duì)象上使用的所有注解,返回注解數(shù)組。
T getDeclaredAnnotation(Class annotationClass) 根據(jù)注解類型獲得對(duì)應(yīng)注解對(duì)象
boolean isAnnotationPresent(Class annotationClass) 判斷當(dāng)前對(duì)象是否使用了指定的注解,如果使用了則返回true,否則false

所有的類成分Class, Method , Field , Constructor,都實(shí)現(xiàn)了AnnotatedElement接口他們都擁有解析注解的能力。

注解解析案例

首先定義一個(gè)MyTest2注解

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest2 {
    String value();
    String name();
    boolean flag() default true;
    String [] str();
}

在Demo類和方法上使用

@MyTest2(value = "大小姐",name ="林黛玉",str={"java","C++"})
public class Demo {
    @MyTest2(value = "小小姐",name ="薛寶釵",str={"java","Python"})
    public void test() {

    }

}

解析類上的注解

public class AnnotationTest2 {
    public static void main(String[] args) {
        //1.得到class對(duì)象
        Class<Demo> demoClass = Demo.class;
        //2.判斷類上是否包含注解
        if (demoClass.isAnnotationPresent(MyTest2.class)) {
            MyTest2 myTest2 = demoClass.getDeclaredAnnotation(MyTest2.class);
            System.out.println(myTest2.value());
            System.out.println(myTest2.name());
            System.out.println(myTest2.flag());
            System.out.println(Arrays.toString(myTest2.str()));
        }
    }
}

運(yùn)行結(jié)果:
《Java-SE-第三十八章》之注解,Java,java,開發(fā)語言

解析方法上的注解

public class AnnotationTest3 {

    public static void main(String[] args) throws NoSuchMethodException {
        //1.得到class對(duì)象
        Class<Demo> demoClass = Demo.class;
        Method test = demoClass.getDeclaredMethod("test");
        //2.判斷方法對(duì)象上是否包含注解
        if (test.isAnnotationPresent(MyTest2.class)) {
            MyTest2 myTest2 = test.getDeclaredAnnotation(MyTest2.class);
            System.out.println(myTest2.value());
            System.out.println(myTest2.name());
            System.out.println(myTest2.flag());
            System.out.println(Arrays.toString(myTest2.str()));
        }
    }
}

運(yùn)行結(jié)果:

《Java-SE-第三十八章》之注解,Java,java,開發(fā)語言

模擬Junit中的@Test

我們定義若干個(gè)方法,只要加了MyTest注解,就可以在啟動(dòng)時(shí)被觸發(fā)執(zhí)行

分析

  1. 定義一個(gè)自定義注解MyTest,只能注解方法,存活范圍是一直都在。
  2. 定義若干個(gè)方法。只要有@MyTest注解的方法就能在啟動(dòng)時(shí)被觸發(fā)執(zhí)行,沒有這個(gè)注解的方法不能執(zhí)行。

示例代碼

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TestDemo {
    @MyTest
    public void test1() {
        System.out.println("test1");
    }
    @MyTest
    public void test2() {
        System.out.println("test2");
    }
    @MyTest
    public void test3() {
        System.out.println("test3");
    }
    @MyTest
    public void test4() {
        System.out.println("test4");
    }

    public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
        TestDemo t = new TestDemo();
        //啟動(dòng)程序
        //1.得到TestDemo對(duì)象
        Class<TestDemo> testDemoClass = TestDemo.class;
        //提取類中的方法
        Method[] declaredMethods = testDemoClass.getDeclaredMethods();
        //觸發(fā)方法
        for (Method method : declaredMethods) {
            if (method.isAnnotationPresent(MyTest.class)) {
                method.invoke(t);
            }
        }
    }
}

運(yùn)行結(jié)果:

《Java-SE-第三十八章》之注解,Java,java,開發(fā)語言

各位看官如果覺得文章寫得不錯(cuò),點(diǎn)贊評(píng)論關(guān)注走一波!謝謝啦!。

《Java-SE-第三十八章》之注解,Java,java,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-650459.html

到了這里,關(guān)于《Java-SE-第三十八章》之注解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Day20-【Java SE高級(jí)】單元測(cè)試 反射 注解 動(dòng)態(tài)代理

    Day20-【Java SE高級(jí)】單元測(cè)試 反射 注解 動(dòng)態(tài)代理

    就是針對(duì)最小的功能單元(方法),編寫測(cè)試代碼對(duì)其進(jìn)行正確性測(cè)試。 1. 咱們之前是如何進(jìn)行單元測(cè)試的?有啥問題? 只能在main方法編寫測(cè)試代碼,去調(diào)用其他方法進(jìn)行測(cè)試。 無法實(shí)現(xiàn)自動(dòng)化測(cè)試,一個(gè)方法測(cè)試失敗,可能影響其他方法的測(cè)試。 無法得到測(cè)試的報(bào)告,需要程

    2024年04月17日
    瀏覽(22)
  • 從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之反射(三十八)

    ? 專業(yè)的解釋: ? 是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法; ? 對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意屬性和方法; ? 這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為Java語言的反射機(jī)制。 ? 通俗的理解: 利用 反射 創(chuàng)建的對(duì)象 可

    2024年02月08日
    瀏覽(89)
  • 第三十九天 Java基礎(chǔ)學(xué)習(xí)(三十三)

    一、Servlet Java類。由Servlet容器(Tomcat)進(jìn)行編譯-.class -運(yùn)行 產(chǎn)生響應(yīng)結(jié)果返回給客戶端瀏覽器。 生命周期:(方法調(diào)用流程) init:初始化方法。在第一次訪問servlet時(shí)被調(diào)用一次。 service:完成servlet所做功能。每次訪問servlet時(shí)都會(huì)被調(diào)用。 doGet0:只有g(shù)et請(qǐng)求。才能訪問。 doPos

    2024年02月15日
    瀏覽(49)
  • 【LeetCode75】第三十八題 二叉樹的最近公共祖先

    【LeetCode75】第三十八題 二叉樹的最近公共祖先

    目錄 題目: 示例: 分析: 代碼: ?給我們一棵二叉樹,然后給我們pq兩個(gè)節(jié)點(diǎn),讓我們找出二叉樹中它們倆的最近的公共祖先。 那么什么樣的節(jié)點(diǎn)是它們倆的最近的公共祖先呢,是有兩種情況,第一種情況的pq兩個(gè)節(jié)點(diǎn)都在同一條路徑上,像下圖這樣: ?那這時(shí)pq的最近公

    2024年02月11日
    瀏覽(23)
  • 第三十三章Java快速排序法

    ??????? 快速排序 (Quicksort)是對(duì) 冒泡排序 的一種改進(jìn),是一種排序執(zhí)行效率很高的排序算法。 ??????? 快速排序的基本思想是:通過一趟排序,將要排序的數(shù)據(jù)分隔成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分

    2024年02月11日
    瀏覽(35)
  • 【Java基礎(chǔ)教程】(三十八)常用類庫篇 · 第八講:數(shù)組操作類——解析Arrays類中的全部操作方法,解鎖Java數(shù)組操作技巧~

    【Java基礎(chǔ)教程】(三十八)常用類庫篇 · 第八講:數(shù)組操作類——解析Arrays類中的全部操作方法,解鎖Java數(shù)組操作技巧~

    前言:在學(xué)習(xí)本文之前,應(yīng)該先學(xué)習(xí)并清楚了解Java基礎(chǔ)部分的數(shù)組相關(guān)的概念和知識(shí)。 若還不具備學(xué)習(xí)條件,請(qǐng)先前往學(xué)習(xí)數(shù)組部分的基礎(chǔ)知識(shí): 《【Java基礎(chǔ)教程】(八)面向?qū)ο笃?· 第二講:Java 數(shù)組全面解析——?jiǎng)討B(tài)與靜態(tài)初始化、二維數(shù)組、方法參數(shù)傳遞、排序與轉(zhuǎn)

    2024年02月15日
    瀏覽(45)
  • 【從零開始學(xué)習(xí)JAVA | 第三十篇】方法引用

    【從零開始學(xué)習(xí)JAVA | 第三十篇】方法引用

    目錄 前言: 方法引用: 方法引用基本概念: 方法可以被引用的條件: 方法引用的種類: 方法引用的優(yōu)點(diǎn): 總結(jié): 方法引用作為一個(gè)重要的知識(shí)點(diǎn),雖然他使用起來很復(fù)雜,而且會(huì)降低代碼的可讀性,但是如果用好了方法引用,我們也會(huì)獲得不錯(cuò)的效率,因此我們?cè)诮裉?/p>

    2024年02月15日
    瀏覽(91)
  • JavaScript從入門到精通系列第三十八篇:詳解JavaScript中DOM的查詢

    JavaScript從入門到精通系列第三十八篇:詳解JavaScript中DOM的查詢

    ???? 學(xué)習(xí)交流群: ??1:這是 孫哥suns 給大家的福利! ??2:我們免費(fèi)分享Netty、Dubbo、k8s、Mybatis、Spring...應(yīng)用和源碼級(jí)別的視頻資料 ????3:QQ群: 583783824 ? ???? ?工作微信: BigTreeJava 拉你進(jìn)微信群,免費(fèi)領(lǐng)?。?????4:本文章內(nèi)容出自上述:Spring應(yīng)用課程!????

    2024年02月05日
    瀏覽(24)
  • 【從零開始學(xué)習(xí)JAVA | 第三十一篇】異常體系介紹

    【從零開始學(xué)習(xí)JAVA | 第三十一篇】異常體系介紹

    ? ? ? ? 本文我們將為大家介紹一下異常的整個(gè)體系,而我們學(xué)習(xí)異常,不是為了敲代碼的時(shí)候不出異常,而是為了能夠熟練的處理異常,如何解決代碼中的異常。 ?我們就以這張圖作為線索來詳細(xì)介紹一下Java中的異常: 在Java中, Exception(異常)是一種表示非致命錯(cuò)誤或異

    2024年02月15日
    瀏覽(89)
  • 【從零開始學(xué)習(xí)JAVA | 第三十七篇】初識(shí)多線程

    【從零開始學(xué)習(xí)JAVA | 第三十七篇】初識(shí)多線程

    目錄 前言: ?編輯 引入: 多線程: ? ? ? ? 什么是多線程: ? ? ? ? 多線程的意義: ?? ? ? ?多線程的應(yīng)用場(chǎng)景: 總結(jié): ? ? ? ? ? ? ? ? 本章節(jié)我們將開始學(xué)習(xí)多線程,多線程是一個(gè)很重要的知識(shí)點(diǎn),他在我們實(shí)際開發(fā)中應(yīng)用廣泛并且基礎(chǔ),可以說掌握多線程編寫程

    2024年02月14日
    瀏覽(571)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包