成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java注解的學(xué)習(xí)之元注解說明

Doyle / 1842人閱讀

摘要:那到底是怎么定義的呢它還能用在什么地方是如何在編譯的時候遇到這個注解就馬上發(fā)出一個提示的呢帶著這些疑問,一步一步學(xué)習(xí)的注解。

最近在學(xué)習(xí)Spring Boot,發(fā)現(xiàn)真的是一個靠注解搭起來的框架,Spring從使用XML到現(xiàn)在使用注解,大概是終于發(fā)現(xiàn)絕大多數(shù)人所寫的項目,都不需要XML的松耦合,快速上線、快速丟棄、快速接手,在一切都要求快的互聯(lián)網(wǎng)公司里,XML這樣的松耦合浪費太多的學(xué)習(xí)成本了,劃不來。

之前一直沒有系統(tǒng)學(xué)習(xí)過Java的注解,學(xué)習(xí)起Spring Boot來總是用得不明所以,想想還是從基礎(chǔ)學(xué)起,方不至于浪費大量的時間去查找Spring Boot各個注解的使用文檔。

Java的注解,實際上包含三方面的內(nèi)容,一個是Java注解本身的定義,一個是Java注解的使用,一個是如何利用Java的反射功能實現(xiàn)功效。本文也將從這三個方面逐一講解,主要參考文章JAVA 注解的基本原理 和 Java語法標(biāo)準(zhǔn)。

Java 內(nèi)置了許多的注解,在Java Annotation可以找到內(nèi)置的所有注解,我們最常見的注解應(yīng)該是@Deprecated,一旦一個方法使用了這個注解,別人此后再使用這個方法時,就會提示這個方法已經(jīng)被廢棄了,建議不再使用。

那@Deprecated到底是怎么定義的呢?它還能用在什么地方?JDK是如何在編譯的時候遇到這個注解就馬上發(fā)出一個提示的呢?帶著這些疑問,一步一步學(xué)習(xí)Java的注解。

一、如何創(chuàng)建一個注解

所有的注解本身都繼承于java.lang.annotation.Annotation, 每一個注解本身就是一個interface,但是注解這種interface有其特殊性,所以,所有的注解都是這樣定義的:

publice @interface xxxx {}

@Deprecated的實現(xiàn)代碼如下:

import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

多了@Documented, @Retention,@Target三個注解,這三個注解分別是什么呢?又有什么作用呢?

用于方法的方法,叫做元方法,所以用于注解的注解,就叫做元注解,這三個都是JDK提供的元注解。

@Documented標(biāo)記這個注解@Deprecated將會出現(xiàn)在Java Doc之中

@Rentention標(biāo)明這個注解的生命周期,RententionPolicy里面定義了三種生命周期,分別是SOURCE,CLASS,RUNTIME三種,SOURCE表示在編譯階段拋棄,CLASS表示會被記錄到class文件里面,但不會出現(xiàn)在vm里面運行,RUNTIME表示在運行期里面存活。

@Target表示這個注解可以用在何處,比如@Deprecated的定義,表明它可以用在構(gòu)造函數(shù),字段,本地變量,方法,包,參數(shù),類

@Deprecated
public class TestDeprecated {
    @Deprecated
    public String name;

    @Deprecated
    public TestDeprecated(String name){ }

    @Deprecated
    public String getName() {
        return name;
    }

    public void testDeprecatedParam(@Deprecated String name, String sex){
        @Deprecated
        String test = "test";
        System.out.println(name + sex + test);
    }
}

如上是@Deprecated在類、字段、構(gòu)造函數(shù)、方法、參數(shù)和本地變量的使用方式。不過本地變量和參數(shù)的@Deprecated似乎是不起作用的。另外,package級別的注解使用,需要使用package-info.java, 比如package-info.java文件如下:

@Deprecated
package com.shahuwang;

這樣子就標(biāo)記了整個包都是要廢棄的了。

目前Java 10 提供了 @Documented, @Inherited,@Native,@Repeatable,@Retention, @Target 共六個元注解,除了上面已講解過的三個,剩余三個的用途:

@Inherited 表示使用了它的注解,再用到類上面時,可被子類繼承此注解。

   @Inherited
   publice @interface Test{}
   
   @Test  
   public class Parent{}
   
   public class Child extends Parent{}
   

如上,Child類也繼承了@Test 這個注解,可以使用它的功能。

@Native 表示定義常量值的字段可以被native代碼引用,當(dāng)native代碼和java代碼都需要維護相同的常量時,如果java代碼使用了@Native標(biāo)志常量字段,可以通過工具將它生成native代碼的頭文件。目前對Java的native代碼研究比較少,后面再對它進行研究

@Repeatable 表示注解可以重復(fù)使用,是Java 8引進的特性。之前注解只能在同一個地方用一次,用了@Repeatable,注解就可以在同一個地方使用多次了,可以參考這篇文章https://blog.csdn.net/aitangy...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75716.html

相關(guān)文章

  • Java基礎(chǔ)知識整理之注解

    摘要:注解提供了一種安全的類似注釋的機制,用來將任何的信息或元數(shù)據(jù)與程序元素類方法成員變量等進行關(guān)聯(lián)。為程序的元素類方法成員變量加上更直觀更明了的說明,這些說明與程序的業(yè)務(wù)邏輯無關(guān),并且提供給指定的工具或框架使用。 什么是注解? Annotation 是 Java5 之后開始引入的新特性,中文為注解。注解提供了一種安全的類似注釋的機制,用來將任何的信息或元數(shù)據(jù)(metadata)與程序元素(...

    blastz 評論0 收藏0
  • java注解初步學(xué)習(xí)

    摘要:定義注解,也叫元數(shù)據(jù)。它可以聲明在包類字段方法局部變量方法參數(shù)等的前面,用來對這些元素進行說明,注釋。方法返回該程序元素上存在的所有注解。與此接口中的其他方法不同,該方法將忽略繼承的注釋。 定義: 注解(Annotation),也叫元數(shù)據(jù)。一種代碼級別的說明。它是JDK5.0及以后版本引入的一個特性,與類、接口、枚舉是在同一個層次。 它可以聲明在包、類、字段、方法、局部變量、方法參數(shù)等...

    KnewOne 評論0 收藏0
  • Java注解-數(shù)據(jù)、注解分類、內(nèi)置注解和自定義注解

    摘要:注解有以下幾個知識點元數(shù)據(jù)注解的分類內(nèi)置注解自定義注解注解處理器本文先介紹前面?zhèn)€知識點元數(shù)據(jù)注解的分類內(nèi)置注解自定義注解。注解相當(dāng)于是一種嵌入在程序中的元數(shù)據(jù),可以使用注解解析工具或編譯器對其進行解析,也可以指定注解在編譯期或運行期有效。 大家好,我是樂字節(jié)的小樂,上次說過了Java多態(tài)的6大特性|樂字節(jié),接下來我們來看看Java編程里的注解。showImg(https://segme...

    Yujiaao 評論0 收藏0
  • 第12章 編程與注解、反射 《Kotlin 項目實戰(zhàn)開發(fā)》

    摘要:第章元編程與注解反射反射是在運行時獲取類的函數(shù)方法屬性父類接口注解元數(shù)據(jù)泛型信息等類的內(nèi)部信息的機制。本章介紹中的注解與反射編程的相關(guān)內(nèi)容。元編程本質(zhì)上是一種對源代碼本身進行高層次抽象的編碼技術(shù)。反射是促進元編程的一種很有價值的語言特性。 第12章 元編程與注解、反射 反射(Reflection)是在運行時獲取類的函數(shù)(方法)、屬性、父類、接口、注解元數(shù)據(jù)、泛型信息等類的內(nèi)部信息的機...

    joyqi 評論0 收藏0
  • java第三方包學(xué)習(xí)之lombok

    摘要:不久前發(fā)現(xiàn)有一個第三方庫可以在一定程度上幫助我們從體力勞動中解救出來,它就是。來看自動生成的方法中對于數(shù)組采用的是。檢查傳入對象是否為,若為,則拋出異常。比如自動拋受檢異常,而無需顯式在方法上使用語句。 前言 Laziness is a virtue!每當(dāng)寫pojo類時,都會重復(fù)寫一些setter/getter/toString方法等大量的模版代碼,無聊繁瑣卻又不得不做,這會讓這個類變...

    GitCafe 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<