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

詳解Java注解知識(shí)點(diǎn)

 更新時(shí)間:2021年05月07日 14:56:53   作者:香菜聊游戲  
這篇文章主要介紹了詳解Java注解知識(shí)點(diǎn),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、注解是什么

Java 注解用于為 Java 代碼提供元數(shù)據(jù),看完這句話也許你還是一臉懵逼,用人話說就是注解不直接影響你的代碼執(zhí)行,僅提供信息。接下我將從注解的定義、元注解、注解屬性、自定義注解、注解解析JDK 提供的注解這幾個(gè)方面再次了解注解(Annotation)

二、jdk支持的注解有哪些

2.1 三種常用的注解:

@SuppressWarnings     該注解的作用是阻止編譯器發(fā)出某些警告信息。它可以有以下參數(shù):  

deprecation :過時(shí)的類或方法警告?!   ?
unchecked:執(zhí)行了未檢查的轉(zhuǎn)換時(shí)警告?!   ?
allthrough:當(dāng)Switch程序塊直接通往下一種情況而沒有Break時(shí)的警告。    
path:在類路徑、源文件路徑等中有不存在的路徑時(shí)的警告?!   ?nbsp;   
serial:當(dāng)在可序列化的類上缺少serialVersionUID定義時(shí)的警告。     
finally:任何finally子句不能完成時(shí)的警告?!  ?nbsp;   
all:關(guān)于以上所有情況的警告

@Deprecated       該注解的作用是標(biāo)記某個(gè)過時(shí)的類或方法。

@Override     該注解用在方法前面,用來標(biāo)識(shí)該方法是重寫父類的某個(gè)方法。

2.2 元注解

元注解主要是用來注解自定義注解的注解,分別有@Retention、 @Target、 @Document、 @Inherited和@Repeatable(JDK1.8加入)五種。

下面講兩個(gè)平常最常用的注解:

@Retention 注解的生命周期,主要有

RetentionPolicy.SOURCE 僅存在于源碼中
 
RetentionPolicy.CLASS 默認(rèn)的策略,在class字節(jié)碼文件中存在,但運(yùn)行時(shí)無(wú)法獲得
 
RetentionPolicy.RUNTIME 在運(yùn)行時(shí)可以通過反射獲取到,也是最常用的。

@Target 注解的作用目標(biāo),主要有

 ElementType.TYPE  作用接口、類、枚舉、注解
 
 ElementType.FIELD 作用屬性字段、枚舉的常量
 
 ElementType.METHOD 作用方法
 
 ElementType.PARAMETER 作用方法參數(shù)
 
 ElementType.CONSTRUCTOR 作用構(gòu)造函數(shù)
 
 ElementType.LOCAL_VARIABLE 作用局部變量
 
 ElementType.ANNOTATION_TYPE 作用于注解(@Retention注解中就使用該屬性)
 
 ElementType.PACKAGE 作用于包
 
 ElementType.TYPE_PARAMETER 作用于類型泛型,即泛型方法、泛型類、泛型接口 (jdk1.8加入)

三、注解實(shí)例

在枚舉中編譯器只會(huì)限制枚舉的名字不能重復(fù),在開發(fā)中經(jīng)常會(huì)遇到枚舉Id 重復(fù)的問題,因?yàn)槊總€(gè)人在開發(fā)功能的時(shí)候一般只會(huì)專注于自己的功能,做完只會(huì)直接提交代碼,不會(huì)注意到枚舉Id沖突,這個(gè)時(shí)候可以使用下面的代碼進(jìn)行枚舉自檢,在項(xiàng)目的開發(fā)階段就能及時(shí)發(fā)現(xiàn)代碼的問題。下面的代碼稍微修改下就可以在項(xiàng)目中使用,拿走不寫。

1、自定義注解

檢測(cè)枚舉的key 是否有重復(fù)

package org.pdool.anno;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author 香菜
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CheckEnum {
}

2、在對(duì)應(yīng)的方法上增加注解

package org.pdool.anno;
/**
* 資源枚舉類
* @author 香菜
*/
public enum ResType {
   GOLD(1),
   DIAMOND(2),
   //注意:此處重復(fù)
   SILVER(2);
   int type;
 
   @CheckEnum
   public int getType() {
       return type;
  }
 
   ResType(int type) {
       this.type = type;
  }
}

3、在項(xiàng)目啟動(dòng)的時(shí)候檢查注解的枚舉

package org.pdool.anno;
 
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
 
/**
* @author 香菜
*/
public class Aain {
   public static void main(String[] args) throws InvocationTargetException,IllegalAccessException {
       // 獲取有注解的方法
       Method[] declaredMethods = ResType.class.getDeclaredMethods();
       Method annoMethod = null;
       for (Method declaredMethod : declaredMethods) {
           CheckEnum  annotation = declaredMethod.getAnnotation(CheckEnum.class);
           if (annotation != null){
               annoMethod = declaredMethod;
              break;
          }
      }
       Set<Object> set = new HashSet<>();
       // 遍歷每個(gè)枚舉的id
       Object[] oo = ResType.class.getEnumConstants();
       for (Object o : oo) {
           Object invoke = annoMethod.invoke(o);
           if (!set.contains(invoke)){
               set.add(invoke);
          }else {
               System.out.println("重復(fù)的key "+ o +" -- "+ invoke);
          }
      }
  }
}

圖片

注:上面的代碼只是簡(jiǎn)單的實(shí)例,只是為了展示核心代碼,在項(xiàng)目中使用時(shí)可以修改類的獲取為掃描項(xiàng)目下的包,遍歷所有的枚舉,就可以在項(xiàng)目中使用了。

四、總結(jié)

注解雖然不影響代碼的運(yùn)行,但是可以為運(yùn)行中的程序提供更多的信息,注解也是很多框架的基本技術(shù)切入點(diǎn),比如Spring 的注解,Lombok 的各種注解,都是使用了注解做了很多事,明白了注解是怎么回事,理解框架也會(huì)輕而易舉。

到此這篇關(guān)于詳解Java注解知識(shí)點(diǎn)的文章就介紹到這了,更多相關(guān)Java注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot項(xiàng)目部署在weblogic中間件的注意事項(xiàng)說明

    SpringBoot項(xiàng)目部署在weblogic中間件的注意事項(xiàng)說明

    這篇文章主要介紹了SpringBoot項(xiàng)目部署在weblogic中間件的注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法

    Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 基于<aop:aspect>與<aop:advisor>的區(qū)別

    基于<aop:aspect>與<aop:advisor>的區(qū)別

    這篇文章主要介紹了<aop:aspect>與<aop:advisor>的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springboot自動(dòng)裝配之注入DispatcherServlet的實(shí)現(xiàn)方法

    Springboot自動(dòng)裝配之注入DispatcherServlet的實(shí)現(xiàn)方法

    這篇文章主要介紹了Springboot自動(dòng)裝配之注入DispatcherServlet,Springboot向外界提供web服務(wù),底層依賴了springframework中的web模塊來實(shí)現(xiàn),那么springboot在什么時(shí)機(jī)向容器注入DispatcherServlet這個(gè)核心類的呢?帶著這個(gè)問題一起通過本文學(xué)習(xí)吧
    2022-05-05
  • springboot集成swagger、knife4j及常用注解的使用

    springboot集成swagger、knife4j及常用注解的使用

    這篇文章主要介紹了springboot集成swagger、knife4j及常用注解的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

    詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

    這篇文章主要介紹了Spring Boot 應(yīng)用如何提高服務(wù)吞吐量,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot利用Validation包實(shí)現(xiàn)高效參數(shù)校驗(yàn)

    SpringBoot利用Validation包實(shí)現(xiàn)高效參數(shù)校驗(yàn)

    如果不進(jìn)行校驗(yàn)就直接使用這些數(shù)據(jù),可能會(huì)導(dǎo)致各種問題,那么SpringBoot如何利用Validation包實(shí)現(xiàn)高效參數(shù)校驗(yàn)?zāi)?下面讓我們一起來探討這個(gè)重要的話題吧
    2025-04-04
  • SpringBoot項(xiàng)目為何引入大量的starter?如何自定義starter?

    SpringBoot項(xiàng)目為何引入大量的starter?如何自定義starter?

    這篇文章主要介紹了SpringBoot項(xiàng)目為何引入大量的starter?如何自定義starter?文章基于這兩個(gè)問題展開全文,需要的小伙伴可以參考一下
    2022-04-04
  • 深入解析Spring Cloud內(nèi)置的Zuul過濾器

    深入解析Spring Cloud內(nèi)置的Zuul過濾器

    這篇文章主要給大家深入的介紹了Spring Cloud內(nèi)置的Zuul過濾器的相關(guān)資料,文中給大家介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-02-02
  • Java裝飾者模式的示例詳解

    Java裝飾者模式的示例詳解

    裝飾者模式:在不改變?cè)袑?duì)象的基礎(chǔ)之上,動(dòng)態(tài)的將功能附加到對(duì)象上,提供了繼承更有彈性的替代方案,也體現(xiàn)了開閉原則。本文將通過示例詳細(xì)講解一下裝飾者模式,需要的可以參考一下
    2022-02-02

最新評(píng)論

昌平区| 满城县| 从江县| 屏山县| 磐石市| 正定县| 桃江县| 扎兰屯市| 鸡泽县| 商丘市| 镇赉县| 吴旗县| 莲花县| 波密县| 桦甸市| 睢宁县| 平陆县| 金门县| 天全县| 夏津县| 蚌埠市| 阳春市| 马尔康县| 普定县| 民勤县| 隆尧县| 凌云县| 自贡市| 宾阳县| 平武县| 珠海市| 扎兰屯市| 萝北县| 达日县| 贡嘎县| 堆龙德庆县| 沾益县| 乌兰察布市| 通化县| 象州县| 拜泉县|