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

Java自帶注解、元注解、自定義注解的區(qū)別

 更新時(shí)間:2023年06月27日 10:09:00   作者:laluckystar  
本文主要介紹了Java自帶注解、元注解、自定義注解的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

什么是注解

1.Annotation是從JDK5.0開始引入的新技術(shù)

2.Annotation的作用 :
(1)不是程序本身,可以對(duì)程序作出解釋(這一點(diǎn)和注釋(comment)沒什么區(qū)別)
(2)可以被其他程序(比如:編譯器等)讀取

3.Annotation的格式:
注解是以"@注釋名"在代碼中存在的,還可以添加一-些參數(shù)值,例如:@SuppressWarnings(value="unchecked")

4.Annotation在哪里使用?
可以附加在package , class , method , field 等上面,相當(dāng)于給他們添加了額外的輔助信息,我們可以通過反射機(jī)制編程實(shí)現(xiàn)對(duì)這些元數(shù)據(jù)的訪問

在java中,注解分為三種類型:自帶注解、元注解、自定義注解。

自帶注解

java自帶注解只有三個(gè):@Override、@Deprecated、@SuppressWarnings

1.@Override :定義在java.lang.Override中,此注釋只適用于修辭方法,表示一個(gè)方法聲明打算重寫超類中的另一個(gè)方法聲明
2.@Deprecated :定義在java.lang.Deprecated中, 此注釋可以用于修辭方法,屬性,類,表示不鼓勵(lì)程序員使用這樣的元素, 通常是因?yàn)樗芪kU(xiǎn)或者存在更好的選擇
3.@SuppressWarnings :定義在java.lang.SuppressWarnings中,用來抑制編譯時(shí)的警告信息

與前兩個(gè)注釋有所不同,你需要添加一個(gè)參數(shù)才能正確使用,這些參數(shù)都是已經(jīng)定義好了的,我們選擇性的使用就好了
(1)@SuppressWarngs("all")
(2)@SuppressWarnings("unchecked")
(3)@SuppressWarnings(value={"unchecked","deprecation"})等等

元注解

元注解是注解的注解,常標(biāo)注于自定義注解之前,用來對(duì)注解的一個(gè)簡單描述。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override{   
}

元注解一共有四個(gè):@Target、@Retention、@Inherited、@Documented

  • @Target是自定義注釋時(shí)必選的,表示該注解的作用目標(biāo)。
  • @Retention注解也是必選的,表示該注解的保留策略。
  • @Inherited和@Documented是可選的元注解。

自定義注解

聲明語法:

@Target(ElementType...)
@Retention(RetentionPolicy...)
權(quán)限修飾符 @interface 注解名稱(){
    //注解體,可以定義屬性
    屬性類型 屬性名() default 默認(rèn)值;
}

屬性聲明格式:屬性類型 屬性名() default 默認(rèn)值;

屬性類型:基本數(shù)據(jù)類型(byte、short、int、long、float、double、boolean、char)、Class、String、enum、Annotation、以及上述類型的數(shù)組形式。

屬性名():根據(jù)個(gè)人需求聲明屬性名。當(dāng)屬性只有一個(gè)的時(shí)候,一般屬性名都寫成value()。

//Spring框架注解之Component
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Component{ 
  String value() default "";
}

在實(shí)際應(yīng)用中,注解大多與反射結(jié)合使用。一般情況下,注解的使用是不影響代碼的正常執(zhí)行,它只是對(duì)代碼做了一個(gè)簡單的描述。但是通過注解+反射,就能夠在編譯時(shí)或者是運(yùn)行時(shí)對(duì)代碼的執(zhí)行產(chǎn)生影響。

注解只提供對(duì)代碼的描述,不影響代碼的正常執(zhí)行。影響代碼執(zhí)行的是通過反射獲取注解中的屬性

如何利用反射獲取注解內(nèi)容

利用反射獲取注解內(nèi)容步驟:

1.先利用反射獲取Class對(duì)象

2.使用Class.getAnnotations()獲取類上的所有注解內(nèi)容(如果只想獲取注解的值,可以使用Class.getAnnotation(XXX.class)獲取特定的注解,然后在獲取的注解內(nèi)容使用.value()即可以獲取注解的value值)

3.使用Class.getDeclaredField(“XX”)獲取Class對(duì)象的特定內(nèi)容的field對(duì)象,然后使用field.getAnnotation(XXX.class),獲取到注解的內(nèi)容

@Tablemi("mi")
class Student2 {
? ? @Fieldmi(name = "id", type = "int", length = 10)
? ? private int id;
? ? @Fieldmi(name = "age", type = "int", length = 3)
? ? private int age;
? ? @Fieldmi(name = "name", type = "varchar", length = 5)
? ? private String name;
?
? ? public Student2() {
? ? }
?
? ? public Student2(int id, int age, String name) {
? ? ? ? this.id = id;
? ? ? ? this.age = age;
? ? ? ? this.name = name;
? ? }
?
}//并提供get和set方法

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Tablemi{
? ? String value();
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Fieldmi{
? ? String name();
? ? String type();
? ? int length();
}

測試代碼:

Class c1 = Class.forName("com.mi.demo01.Student2");
//通過反射獲取注解
Annotation[] annotations = c1.getAnnotations();
for (Annotation annotation : annotations) {
    System.out.println(annotation);
}
//獲的注解的value值
Tablemi tablemi = (Tablemi)c1.getAnnotation(Tablemi.class);
String value = tablemi.value();
System.out.println(value);
//獲得類指定的注解
Field field = c1.getDeclaredField("id");
Fieldmi fieldmi = field.getAnnotation(Fieldmi.class);
System.out.println(fieldmi.name());
System.out.println(fieldmi.type());
System.out.println(fieldmi.length());
//獲得類指定的注解
Field field1 = c1.getDeclaredField("name");
Fieldmi fieldmi1 = field1.getAnnotation(Fieldmi.class);
System.out.println(fieldmi1.name());
System.out.println(fieldmi1.type());
System.out.println(fieldmi1.length());
//獲得類指定的注解
Field field2 = c1.getDeclaredField("age");
Fieldmi fieldmi2 = field2.getAnnotation(Fieldmi.class);
System.out.println(fieldmi2.name());
System.out.println(fieldmi2.type());
System.out.println(fieldmi2.length());

測試結(jié)果:

到此這篇關(guān)于Java自帶注解、元注解、自定義注解的區(qū)別的文章就介紹到這了,更多相關(guān)Java自帶注解 元注解 自定義注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot war包部署到Tomcat服務(wù)器

    SpringBoot war包部署到Tomcat服務(wù)器

    這篇文章主要介紹了SpringBoot war包部署到Tomcat服務(wù)器,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot@Aspect 打印訪問請(qǐng)求和返回?cái)?shù)據(jù)方式

    SpringBoot@Aspect 打印訪問請(qǐng)求和返回?cái)?shù)據(jù)方式

    這篇文章主要介紹了SpringBoot@Aspect 打印訪問請(qǐng)求和返回?cái)?shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java自動(dòng)生成編號(hào)的方法步驟

    Java自動(dòng)生成編號(hào)的方法步驟

    在新增數(shù)據(jù)時(shí),往往需要自動(dòng)生成編號(hào),本文主要介紹了Java自動(dòng)生成編號(hào)的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 淺析Java虛擬機(jī)詳解之概述、對(duì)象生存法則

    淺析Java虛擬機(jī)詳解之概述、對(duì)象生存法則

    這篇文章主要介紹了Java虛擬機(jī)詳解之概述、對(duì)象生存法則,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Maven Spring框架依賴包示例詳解

    Maven Spring框架依賴包示例詳解

    這篇文章主要介紹了如何在Maven項(xiàng)目中添加Spring框架的依賴包,包括Spring核心工具包和Spring JDBC,文章還提到在pom.xml文件中添加Spring配置文件頭信息,感興趣的朋友一起看看吧
    2025-03-03
  • SpringBoot配置Druid數(shù)據(jù)監(jiān)控代碼實(shí)例

    SpringBoot配置Druid數(shù)據(jù)監(jiān)控代碼實(shí)例

    這篇文章主要介紹了SpringBoot配置Druid數(shù)據(jù)監(jiān)控代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 使用BitSet位集合,一個(gè)重復(fù)校驗(yàn)工具

    使用BitSet位集合,一個(gè)重復(fù)校驗(yàn)工具

    這篇文章主要介紹了使用BitSet位集合,一個(gè)重復(fù)校驗(yàn)工具,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java序列化與反序列化的實(shí)例分析講解

    Java序列化與反序列化的實(shí)例分析講解

    今天小編就為大家分享一篇關(guān)于Java序列化與反序列化的實(shí)例分析講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 淺談Java堆外內(nèi)存之突破JVM枷鎖

    淺談Java堆外內(nèi)存之突破JVM枷鎖

    這篇文章主要介紹了淺談Java堆外內(nèi)存之突破JVM枷鎖,涉及jvm內(nèi)存分配,jvm垃圾回收,堆外內(nèi)存的垃圾回收等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java設(shè)計(jì)模式之裝飾者模式詳解和代碼實(shí)例

    Java設(shè)計(jì)模式之裝飾者模式詳解和代碼實(shí)例

    這篇文章主要介紹了Java設(shè)計(jì)模式之裝飾者模式詳解和代碼實(shí)例,Decorator模式(別名Wrapper):動(dòng)態(tài)將職責(zé)附加到對(duì)象上,若要擴(kuò)展功能,裝飾者提供了比繼承更具彈性的代替方案,需要的朋友可以參考下
    2014-09-09

最新評(píng)論