輕松掌握J(rèn)ava注解,讓編程更智能、更優(yōu)雅
一、什么是注解
定義:注解(Annotation),也叫元數(shù)據(jù)。一種代碼級(jí)別的說明。
它是JDK1.5及以后版本引入的一個(gè)特性,與類、接口、枚舉是在同一個(gè)層次。
它可以聲明在包、類、字段、方法、局部變量、方法參數(shù)等的前面,用來對(duì)這些元素進(jìn)行說明,注釋。
二、內(nèi)置注解
- @Override: 標(biāo)記在成員方法上,用于標(biāo)識(shí)當(dāng)前方法是重寫父類(父接口)方法,編譯器在對(duì)該方法進(jìn)行編譯時(shí)會(huì)檢查是否符合重寫規(guī)則,如果不符合,編譯報(bào)錯(cuò)。
- @Deprecated: 用于標(biāo)記當(dāng)前類、成員變量、成員方法或者構(gòu)造方法過時(shí)如果開發(fā)者調(diào)用了被標(biāo)記為過時(shí)的方法,編譯器在編譯期進(jìn)行警告。
- @SuppressWarnings: 壓制警告注解,可放置在類和方法上,該注解的作用是阻止編譯器發(fā)出某些警告信息。
三、元注解
元注解即注解的注解。
在jdk的中java.lang.annotation包中定義了四個(gè)元注解。
@Target
指定被修飾的注解的作用范圍,如果不寫默認(rèn)是任何地方都可以使用。
可選的參數(shù)值在枚舉類ElemenetType中包括:
TYPE: 用在類,接口上 FIELD:用在成員變量上 METHOD: 用在方法上 PARAMETER:用在參數(shù)上 CONSTRUCTOR:用在構(gòu)造方法上 LOCAL_VARIABLE:用在局部變量上
@Retention
指定了被修飾的注解的生命周期。
可選的參數(shù)值在枚舉類型RetentionPolicy中包括:
SOURCE:注解只存在于Java源代碼中,編譯生成的字節(jié)碼文件中就不存在了。 CLASS:注解存在于Java源代碼、編譯以后的字節(jié)碼文件中,運(yùn)行的時(shí)候內(nèi)存中沒有,默認(rèn)值。 RUNTIME:注解存在于Java源代碼中、編譯以后的字節(jié)碼文件中、運(yùn)行時(shí)內(nèi)存中,程序可以通過反射獲取該注解。
正常開發(fā)中我們自定義注解的時(shí)候無腦用 Runtime 就可以了。
@Documented
指定了被修飾的注解是可以Javadoc等工具文檔化。
@Inherited
指定了被修飾的注解修飾程序元素的時(shí)候是可以被子類繼承的。
四、自定義注解
定義格式
元注解
public @interface 注解名稱{
屬性列表;
}
注解的屬性
- 格式1:數(shù)據(jù)類型 屬性名();
- 格式2:數(shù)據(jù)類型 屬性名() default 默認(rèn)值;
示例如下:
public @interface Student {
String name();
int age() default 18;
String gender() default "男";
}
注意:沒有默認(rèn)值的屬性是必填的,當(dāng)屬性只有一個(gè),且屬性名為 value 時(shí),可以省略。
示例:
public class Test {
@Student("zhangsan")
public void test(){
}
}
public @interface Student {
String value();
}
反射解析注解
反射請(qǐng)移步:Java反射,看完就會(huì)用
如果反射懂了,注解懂了,那就不需要過多解釋直接看示例就行了。
自定義注解 Book
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Book {
// 書名
String value();
// 價(jià)格
double price() default 100;
// 作者
String[] authors();
}
BookStore類
@Book(value = "紅樓夢(mèng)",authors = "曹雪芹",price = 998)
public class BookStore {
}
TestAnnotation類
public class TestAnnotation {
public static void main(String[] args) throws Exception{
System.out.println("---------獲取類上注解的數(shù)據(jù)----------");
test();
}
/**
* 獲取BookStore類上使用的Book注解數(shù)據(jù)
*/
public static void test(){
// 獲得BookStore類對(duì)應(yīng)的Class對(duì)象
Class c = BookStore.class;
// 判斷BookStore類是否使用了Book注解
if(c.isAnnotationPresent(Book.class)) {
// 根據(jù)注解Class對(duì)象獲取注解對(duì)象
Book book = (Book) c.getAnnotation(Book.class);
// 輸出book注解屬性值
System.out.println("書名:" + book.value());
System.out.println("價(jià)格:" + book.price());
System.out.println("作者:" + Arrays.toString(book.authors()));
}
}
}到此這篇關(guān)于輕松掌握J(rèn)ava注解,讓編程更智能、更優(yōu)雅的文章就介紹到這了,更多相關(guān)Java注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java注解之Retention、Documented、Inherited介紹
- java教程之java注解annotation使用方法
- 5分鐘搞懂java注解@Annotation的具體使用
- Java注解Annotation與自定義注解詳解
- Java注解機(jī)制之Spring自動(dòng)裝配實(shí)現(xiàn)原理詳解
- Java注解@Transactional事務(wù)類內(nèi)調(diào)用不生效問題及解決辦法
- 基于Java注解(Annotation)的自定義注解入門介紹
- 詳解Java注解教程及自定義注解
- 創(chuàng)建自定義的Java注解類的方法
- 深入理解Java注解類型(@Annotation)
相關(guān)文章
springboot集成elasticsearch7的圖文方法
本文記錄springboot集成elasticsearch7的方法,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-05-05
Spring實(shí)戰(zhàn)之使用TransactionProxyFactoryBean實(shí)現(xiàn)聲明式事務(wù)操作示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之使用TransactionProxyFactoryBean實(shí)現(xiàn)聲明式事務(wù)操作,結(jié)合實(shí)例形式分析了spring使用TransactionProxyFactoryBean實(shí)現(xiàn)聲明式事務(wù)相關(guān)配置、接口設(shè)置與使用技巧,需要的朋友可以參考下2020-01-01
實(shí)例解析Java程序中正則表達(dá)式的貪婪模式匹配
貪婪模式又叫最大匹配,X?、X*、X+、X{n,}都是最大匹配,例如你要用“<.+>”去匹配“a<tr>aava </tr>abb”,也許你所期待的結(jié)果是想匹配“<tr>”,但是實(shí)際結(jié)果卻會(huì)匹配到“<tr>aava </tr>”,下面我們就來看具體看一下貪婪模式的使用.2016-05-05
SpringBoot整合PageHelper實(shí)現(xiàn)分頁查詢功能
本文介紹了在SpringBoot+MyBatis項(xiàng)目中使用PageHelper實(shí)現(xiàn)分頁功能的方法,包括PageHelper的簡要介紹,環(huán)境搭建,核心使用方式,實(shí)戰(zhàn)案例,以及PageHelper的工作原理,通過PageHelper,可以實(shí)現(xiàn)近乎零侵入的分頁功能,使分頁邏輯與業(yè)務(wù)代碼解耦,需要的朋友可以參考下2026-04-04
Java實(shí)現(xiàn)瀏覽器大文件上傳的示例詳解
文件上傳是許多項(xiàng)目都有的功能,用戶上傳小文件速度一般都很快,但如果是大文件幾個(gè)g,幾十個(gè)g的時(shí)候,上傳了半天,馬上就要完成的時(shí)候,網(wǎng)絡(luò)波動(dòng)一下,文件又要重新上傳,所以本文給大家介紹了Java實(shí)現(xiàn)瀏覽器大文件上傳的示例,需要的朋友可以參考下2024-07-07
Nacos框架服務(wù)注冊(cè)實(shí)現(xiàn)流程
這篇文章主要介紹了SpringCloud服務(wù)注冊(cè)之nacos實(shí)現(xiàn)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08

