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

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

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

什么是注解

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

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

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

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

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

自帶注解

java自帶注解只有三個:@Override、@Deprecated、@SuppressWarnings

1.@Override :定義在java.lang.Override中,此注釋只適用于修辭方法,表示一個方法聲明打算重寫超類中的另一個方法聲明
2.@Deprecated :定義在java.lang.Deprecated中, 此注釋可以用于修辭方法,屬性,類,表示不鼓勵程序員使用這樣的元素, 通常是因為它很危險或者存在更好的選擇
3.@SuppressWarnings :定義在java.lang.SuppressWarnings中,用來抑制編譯時的警告信息

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

元注解

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

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

元注解一共有四個:@Target、@Retention、@Inherited、@Documented

  • @Target是自定義注釋時必選的,表示該注解的作用目標(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ù)個人需求聲明屬性名。當(dāng)屬性只有一個的時候,一般屬性名都寫成value()。

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

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

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

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

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

1.先利用反射獲取Class對象

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

3.使用Class.getDeclaredField(“XX”)獲取Class對象的特定內(nèi)容的field對象,然后使用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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談spring DI 依賴注入方式和區(qū)別

    淺談spring DI 依賴注入方式和區(qū)別

    Spring框架對Java開發(fā)的重要性不言而喻,本文主要介紹了spring DI 依賴注入方式和區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot優(yōu)雅統(tǒng)計接口耗時實戰(zhàn)中的四種高效方案

    SpringBoot優(yōu)雅統(tǒng)計接口耗時實戰(zhàn)中的四種高效方案

    這篇文章主要為大家詳細(xì)介紹了SpringBoot優(yōu)雅統(tǒng)計接口耗時實戰(zhàn)中的四種高效方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-01-01
  • 學(xué)習(xí)不同 Java.net 語言中類似的函數(shù)結(jié)構(gòu)

    學(xué)習(xí)不同 Java.net 語言中類似的函數(shù)結(jié)構(gòu)

    這篇文章主要介紹了學(xué)習(xí)不同 Java.net 語言中類似的函數(shù)結(jié)構(gòu),函數(shù)式編程語言包含多個系列的常見函數(shù)。但開發(fā)人員有時很難在語言之間進(jìn)行切換,因為熟悉的函數(shù)具有不熟悉的名稱。函數(shù)式語言傾向于基于函數(shù)范例來命名這些常見函數(shù)。,需要的朋友可以參考下
    2019-06-06
  • SpringAOP四種通知類型+環(huán)繞通知說明

    SpringAOP四種通知類型+環(huán)繞通知說明

    這篇文章主要介紹了SpringAOP四種通知類型+環(huán)繞通知說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 基于eclipse-temurin鏡像部署spring boot應(yīng)用的實現(xiàn)示例

    基于eclipse-temurin鏡像部署spring boot應(yīng)用的實現(xiàn)示例

    本文提供了基于eclipse-temurin鏡像部署Spring Boot應(yīng)用的詳細(xì)實現(xiàn)示例,通過使用Docker鏡像,可以輕松地創(chuàng)建和管理Spring Boot應(yīng)用程序的容器化環(huán)境,感興趣的可以了解一下
    2023-08-08
  • Java多線程工具CompletableFuture詳解

    Java多線程工具CompletableFuture詳解

    這篇文章主要介紹了Java多線程工具CompletableFuture詳解,CompletableFuture?是?java?1.8?追加的新特性,通俗的話來說,是一個函數(shù)式的,用于控制多任務(wù)同步、異步組合操作的工具,需要的朋友可以參考下
    2024-01-01
  • Java多線程并發(fā)與并行和線程與進(jìn)程案例

    Java多線程并發(fā)與并行和線程與進(jìn)程案例

    這篇文章主要介紹了Java多線程并發(fā)與并行和線程與進(jìn)程案例,文章基于Java的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價價值,需要的小伙伴可以參考一下
    2022-06-06
  • springBoot項目啟動類啟動無法訪問的解決方法

    springBoot項目啟動類啟動無法訪問的解決方法

    這篇文章主要介紹了springBoot項目啟動類啟動無法訪問的解決方法,需要的朋友可以參考下
    2018-10-10
  • Java POI實現(xiàn)將導(dǎo)入Excel文件的示例代碼

    Java POI實現(xiàn)將導(dǎo)入Excel文件的示例代碼

    這篇文章主要介紹了Java POI實現(xiàn)將導(dǎo)入Excel文件的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • SpringBoot實現(xiàn)緩存組件配置動態(tài)切換的步驟詳解

    SpringBoot實現(xiàn)緩存組件配置動態(tài)切換的步驟詳解

    現(xiàn)在有多個springboot項目,但是不同的項目中使用的緩存組件是不一樣的,有的項目使用redis,有的項目使用ctgcache,現(xiàn)在需要用同一套代碼通過配置開關(guān),在不同的項目中切換這兩種緩存,本文介紹了SpringBoot實現(xiàn)緩存組件配置動態(tài)切換的步驟,需要的朋友可以參考下
    2024-07-07

最新評論

托里县| 襄城县| 乐平市| 旬邑县| 洪洞县| 闵行区| 肇东市| 瓦房店市| 甘谷县| 永嘉县| 武鸣县| 南川市| 马关县| 芒康县| 大渡口区| 建始县| 定南县| 泰宁县| 西丰县| 芒康县| 巨野县| 抚宁县| 修文县| 阜南县| 托克逊县| 东兴市| 曲沃县| 平塘县| 博爱县| 禄劝| 水城县| 和顺县| 宁陵县| 咸阳市| 和龙市| 柳州市| 纳雍县| 静海县| 绥芬河市| 南岸区| 叶城县|