亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一篇文章帶你搞定JAVA注解

 更新時(shí)間:2021年07月14日 17:15:05   作者:香菜聊游戲  
這篇文章主要介紹了詳解Java注解的實(shí)現(xiàn)與使用方法的相關(guān)資料,希望通過(guò)本文大家能夠理解掌握J(rèn)ava注解的知識(shí),需要的朋友可以參考下

1、注解是什么

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

2、jdk支持的注解有哪些

2.1 三種常用的注解:

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

deprecation :過(guò)時(shí)的類或方法警告?!   ?/p>

unchecked:執(zhí)行了未檢查的轉(zhuǎn)換時(shí)警告。    

allthrough:當(dāng)Switch程序塊直接通往下一種情況而沒(méi)有Break時(shí)的警告。

path:在類路徑、源文件路徑等中有不存在的路徑時(shí)的警告?!   ?/p>

serial:當(dāng)在可序列化的類上缺少serialVersionUID定義時(shí)的警告?!?/p>

finally:任何finally子句不能完成時(shí)的警告?!  ?/p>

all:關(guān)于以上所有情況的警告

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

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

2.2 元注解

元注解主要是用來(lái)注解自定義注解的注解,分別有@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í)可以通過(guò)反射獲取到,也是最常用的。

@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加入)

3、注解實(shí)例

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

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)目中使用了。

4、總結(jié)

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

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

相關(guān)文章

  • Java中的ReadWriteLock高效處理并發(fā)讀寫(xiě)操作實(shí)例探究

    Java中的ReadWriteLock高效處理并發(fā)讀寫(xiě)操作實(shí)例探究

    這篇文章主要為大家介紹了Java中的ReadWriteLock高效處理并發(fā)讀寫(xiě)操作實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Java?代碼本地設(shè)置Hadoop用戶名密碼的方法

    Java?代碼本地設(shè)置Hadoop用戶名密碼的方法

    在Hadoop環(huán)境中,通常使用Kerberos進(jìn)行身份驗(yàn)證,這篇文章主要介紹了Java?代碼本地設(shè)置Hadoop用戶名密碼的方法,需要的朋友可以參考下
    2024-08-08
  • 第三方網(wǎng)站微信登錄java代碼實(shí)現(xiàn)

    第三方網(wǎng)站微信登錄java代碼實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了第三方網(wǎng)站微信登錄的java代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 淺談Spring的兩種配置容器

    淺談Spring的兩種配置容器

    這篇文章主要介紹了淺談Spring的兩種配置容器,介紹了其實(shí)現(xiàn)以及簡(jiǎn)單的實(shí)例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Java手動(dòng)實(shí)現(xiàn)Redis的LRU緩存機(jī)制

    Java手動(dòng)實(shí)現(xiàn)Redis的LRU緩存機(jī)制

    在Java中LRU的實(shí)現(xiàn)方式是使用HashMap結(jié)合雙向鏈表,HashMap的值是雙向鏈表的節(jié)點(diǎn),雙向鏈表的節(jié)點(diǎn)也保存一份key value。
    2021-05-05
  • Java通過(guò)try釋放資源的方法

    Java通過(guò)try釋放資源的方法

    這篇文章主要介紹了Java通過(guò)try釋放資源的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • java?stream實(shí)現(xiàn)分組BigDecimal求和以及自定義分組求和

    java?stream實(shí)現(xiàn)分組BigDecimal求和以及自定義分組求和

    這篇文章主要給大家介紹了關(guān)于java?stream實(shí)現(xiàn)分組BigDecimal求和以及自定義分組求和的相關(guān)資料,Stream是Java8的一大亮點(diǎn),是對(duì)容器對(duì)象功能的增強(qiáng),它專注于對(duì)容器對(duì)象進(jìn)行各種非常便利、高效的聚合操作或者大批量數(shù)據(jù)操作,需要的朋友可以參考下
    2023-12-12
  • 使用abstract格式修飾抽象方法

    使用abstract格式修飾抽象方法

    abstract是抽象的意思,用于修飾方法方法和類,修飾的方法是抽象方法,修飾的類是抽象類,這篇文章主要介紹了怎樣使用abstract格式修飾抽象方法,需要的朋友可以參考下
    2023-05-05
  • SpringBoot之自定義啟動(dòng)異常堆棧信息打印方式

    SpringBoot之自定義啟動(dòng)異常堆棧信息打印方式

    這篇文章主要介紹了SpringBoot之自定義啟動(dòng)異常堆棧信息打印方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java明文密碼三重加密方法

    java明文密碼三重加密方法

    這篇文章主要介紹了java明文密碼加密,對(duì)一個(gè)明文密碼進(jìn)行了三重加密:第一層?xùn)艡谝淮?,第二層在柵欄一次,第三層在一次摩斯加密,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評(píng)論