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

詳解Java進(jìn)階知識(shí)注解

 更新時(shí)間:2021年04月14日 08:56:48   作者:offer沖沖沖  
這篇文章主要介紹了詳解Java進(jìn)階知識(shí)注解,從注解的定義、元注解、自定義注解、注解實(shí)例這幾個(gè)方面,讓同學(xué)們更加深入的了解注解

一、注解的概念

1、注解官方解釋

注解

叫元數(shù)據(jù),一種代碼級(jí)別的說明,它是JDK1.5及以后版本引入的一個(gè)特性,與類、接口、枚舉在同一個(gè)層次,它可以聲明在包、類、字段、局部變量、方法參數(shù)等的前面,用來對(duì)這些元素進(jìn)行說明、注釋。

注解的作用分類

  • 編寫文檔:通過代碼里表示的元數(shù)據(jù)生成文檔【生成doc文檔】
  • 代碼分析:通過代碼里表示的元數(shù)據(jù)進(jìn)行分析【使用反射】
  • 編譯檢查:通過代碼里表示的元數(shù)據(jù)讓編譯器能夠?qū)崿F(xiàn)基本的編譯檢查【Override】

注解按照運(yùn)行機(jī)制分類

  • 源碼注解:注解只在源碼中存在,編譯成.class文件之后就不存在了
  • 編譯時(shí)注解:注解在源碼存在的基礎(chǔ)上,也會(huì)在.class文件中存在,但是在運(yùn)行階段中就不存在了,例如:@Override
  • 運(yùn)行時(shí)注解:注解在運(yùn)行階段依然存在,且能夠影響程序的運(yùn)行過程,例如:@Autowired

2、注解與注釋的區(qū)別

(1)注解:用于描述代碼,說明程序,主要目的是為了給計(jì)算機(jī)看,且能夠影響程序的運(yùn)行。

(2)注釋:用于描述代碼的作用和一些關(guān)鍵性的知識(shí)點(diǎn),使用文字描述程序,是為了給程序員觀看,以此來使程序員能夠以最快的時(shí)間了解被注釋的代碼。


二、內(nèi)置注解與元注解

1、常用的內(nèi)置注解

  • @Override:檢測(cè)該注解標(biāo)記的方法是否繼承自父類;
  • @Deprecated:說明被標(biāo)記的內(nèi)容已過時(shí),暗示著在不久之后可能會(huì)被更新抹除;
  • @SuppressWarnings:壓制警告,就是被標(biāo)記的部分不會(huì)產(chǎn)生警告,常用的參數(shù):@SuppressWarnings(“all”);
  • @SafeVarargs:參數(shù)安全類型注解,它的目的就是提醒開發(fā)者不要用參數(shù)做一些不安全的操作,它的存在會(huì)阻止編譯器產(chǎn)生unchecked這樣的警告;

2、常用的元注解

元注解:用于描述注解的注解,在創(chuàng)建注解時(shí)使用

1. @Target屬性值:

  • ElementType.TYPE:能修飾類、接口或枚舉類型
  • ElementType.METHOD:能修飾方法
  • ElementType.FIELD: 能修飾成員變量
  • ElementType.PARAMETER:能修飾參數(shù)
  • ElementType.CONSTRUCTOR:能夠修飾構(gòu)造器
  • ElementType.ANNOTATION_TYPE:能夠修飾注解
  • ElementType.PACKAGE:能夠修飾包
  • ElementType.LOCAL_VARIABLE:能夠修飾局部變量

2.@Retention屬性值:

  • RetentionPolicy.SOURCE:注解只在源碼中存在,編譯成class之后就沒了
  • RetentionPolicy.CLASS:注解在源碼和class中都存在,運(yùn)行時(shí)就沒了,這個(gè)是Retention的默認(rèn)值
  • RetentionPolicy.RUNTIME: 注解在源碼、class、運(yùn)行時(shí)都存在,如果要使用反射一定要定義為這種類型

3.@Documented:該注解的作用就是表示此注解標(biāo)記的注解可以包含到j(luò)avadoc文件中去
4.@Inherited:描述注解是否能夠被子類所繼承

三、自定義注解

1、自定義注解基礎(chǔ)知識(shí)

1.格式:

@Inherited//元注解public @interface zhujie{}

2.注解本質(zhì):注解的本質(zhì)上就是一個(gè)接口,該接口默認(rèn)繼承Annotation

public interface MyAnno extends java.lang.annotation.Annotion

3.屬性:接口中可以定義的內(nèi)容(成員方法、抽象方法)

屬性的返回值:

  • 八種基本數(shù)據(jù)類型
  • 字符串類、接口、枚舉
  • 注解
  • 以上類型的數(shù)組

屬性賦值注意事項(xiàng)

  • 如果定義屬性時(shí),使用default關(guān)鍵字給屬性默認(rèn)初始化值,則使用注解時(shí),就可以不進(jìn)行屬性的賦值,否則都必須給屬性賦值
  • 如果只有一個(gè)屬性需要賦值的話,并且屬性的名稱是value,則使用注解給屬性賦值時(shí),value可以省略,直接定義值就可以了
  • 數(shù)組賦值時(shí),值需要使用{}包裹,如果數(shù)組中只有一個(gè)值,則{}可以省略不寫

2、演示自定義注解的使用

自定義注解annotation

@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.TYPE)
public @interface annotation {
    String name() default "木魚";
    int age();
    int[] score();
}

使用以上注解的類TestAnnotation

//name具有默認(rèn)值,不需要必須為name賦值,但也可以重新賦值
@annotation(age=20,score={99,100,100})
public class TestAnnotation {

    public static void main(String[] args) throws ClassNotFoundException {
        Class clazz = Class.forName("test.TestAnnotation");
        annotation annotation = (annotation) clazz.getAnnotation(annotation.class);
        System.out.println("姓名:"+annotation.name()+"  年齡:"+annotation.age());
        System.out.print("成績(jī)?yōu)椋?);
        int[] score=annotation.score();
        for (int score1:score){
            System.out.print(score1+" ");
        }
    }

}

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

3、演示注解在程序中的作用

兩個(gè)方法:

  • 類對(duì)象調(diào)用 isAnnotationPresent(Class<? extends Annotation> annotationClass)判斷是否應(yīng)用了某個(gè)注解
  • 通過getAnnotation()方法獲取Annotation對(duì)象,或者getAnnotations()方法獲取所有應(yīng)用在該類上的注解

1.創(chuàng)建自定義注解

@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.FIELD)
public @interface StringNull {

}

2.創(chuàng)建實(shí)體類

public class Student {
    @StringNull
    public String name=null;

    @StringNull
    public String xuehao=null;

    @StringNull
    public String sex=null;

    public void setName(String name) {
        this.name = name;
    }

    public void setXuehao(String xuehao) {
        this.xuehao = xuehao;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

3.創(chuàng)建測(cè)試類,測(cè)試注解

public class TestAnnotation {

    public static void main(String[] args) throws Exception{
        Class clazz = Class.forName("test.Student");
        Student student =(Student) clazz.newInstance();
        student.setName("小明");
        Field[] fields= clazz.getFields();
        for(Field f:fields){
            if(f.isAnnotationPresent(StringNull.class)){
                if(f.get(student)==null){
                    System.out.println(f.getName()+":是空的字符串屬性");
                }else{
                    System.out.println(f.getName()+":"+f.get(student));
                }
            }
        }
    }
}

4.運(yùn)行結(jié)果

以上就是詳解Java進(jìn)階知識(shí)注解的詳細(xì)內(nèi)容,更多關(guān)于Java注解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java實(shí)現(xiàn)UDP通信過程實(shí)例分析【服務(wù)器端與客戶端】

    Java實(shí)現(xiàn)UDP通信過程實(shí)例分析【服務(wù)器端與客戶端】

    這篇文章主要介紹了Java實(shí)現(xiàn)UDP通信過程,結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)UDP服務(wù)器端與客戶端相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • SpringBoot定制三種錯(cuò)誤頁(yè)面及錯(cuò)誤數(shù)據(jù)方法示例

    SpringBoot定制三種錯(cuò)誤頁(yè)面及錯(cuò)誤數(shù)據(jù)方法示例

    Spring Boot提供的默認(rèn)異常處理機(jī)制通常并不一定適合我們實(shí)際的業(yè)務(wù)場(chǎng)景,因此,我們通常會(huì)根據(jù)自身的需要對(duì)Spring Boot全局異常進(jìn)行統(tǒng)一定制,例如定制錯(cuò)誤頁(yè)面,定制錯(cuò)誤數(shù)據(jù)等。本文主要介紹了SpringBoot三種自定義錯(cuò)誤頁(yè)面的實(shí)現(xiàn),快來學(xué)習(xí)吧
    2021-12-12
  • java開放地址法和鏈地址法解決hash沖突的方法示例

    java開放地址法和鏈地址法解決hash沖突的方法示例

    這篇文章主要介紹了java開放地址法和鏈地址法解決hash沖突的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring?Boot分離配置文件的多種方式總結(jié)

    Spring?Boot分離配置文件的多種方式總結(jié)

    Spring Boot可以外部化程序配置,以便可以在不同環(huán)境中使用相同的應(yīng)用程序代碼;當(dāng)然Spring Boot可以將配置文件進(jìn)行拆分,以便于激活不同的運(yùn)行環(huán)境,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Spring?Boot分離配置文件的多種方式,需要的朋友可以參考下
    2022-11-11
  • Java語言之LinkedList和鏈表的實(shí)現(xiàn)方法

    Java語言之LinkedList和鏈表的實(shí)現(xiàn)方法

    LinkedList是由傳統(tǒng)的鏈表數(shù)據(jù)結(jié)構(gòu)演變而來的,鏈表是一種基本的數(shù)據(jù)結(jié)構(gòu),它可以動(dòng)態(tài)地增加或刪除元素,下面這篇文章主要給大家介紹了關(guān)于Java語言之LinkedList和鏈表的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2023-05-05
  • Java從數(shù)據(jù)庫(kù)中讀取Blob對(duì)象圖片并顯示的方法

    Java從數(shù)據(jù)庫(kù)中讀取Blob對(duì)象圖片并顯示的方法

    這篇文章主要介紹了Java從數(shù)據(jù)庫(kù)中讀取Blob對(duì)象圖片并顯示的方法,實(shí)例分析了Java讀取數(shù)據(jù)庫(kù)中Blob對(duì)象圖片的技巧與操作方法,需要的朋友可以參考下
    2015-02-02
  • URLConnection發(fā)送HTTP請(qǐng)求的方法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    URLConnection發(fā)送HTTP請(qǐng)求的方法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了URLConnection發(fā)送HTTP請(qǐng)求的方法,主要介紹了如何通過Java(模擬瀏覽器)發(fā)送HTTP請(qǐng)求,有興趣的可以了解一下
    2017-07-07
  • java使用CollectionUtils工具類判斷集合是否為空方式

    java使用CollectionUtils工具類判斷集合是否為空方式

    這篇文章主要介紹了java使用CollectionUtils工具類判斷集合是否為空方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 使用@PropertySource讀取配置文件通過@Value進(jìn)行參數(shù)注入

    使用@PropertySource讀取配置文件通過@Value進(jìn)行參數(shù)注入

    這篇文章主要介紹了使用@PropertySource讀取配置文件通過@Value進(jìn)行參數(shù)注入,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot2.0集成Swagger2訪問404的解決操作

    SpringBoot2.0集成Swagger2訪問404的解決操作

    這篇文章主要介紹了SpringBoot2.0集成Swagger2訪問404的解決操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評(píng)論