新聞中心
我們用過JDK給我們提供的 @Override @Deprecated @SuppressWarning 注解 ,這些注解是JDK給我們提供的,我們只是在用別人寫好的東西,那么我們是否可以自己寫注解呢?當(dāng)然是可以的。

創(chuàng)新互聯(lián)云計(jì)算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過13年的服務(wù)器租用、BGP機(jī)房服務(wù)器托管、云服務(wù)器、網(wǎng)站空間、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn),已先后獲得國家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、網(wǎng)站空間、申請域名、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
我們寫的注解包括三個(gè)環(huán)節(jié):
1、 注解的聲明,也就是注解類的定義。
形式如下 @interface 來進(jìn)行注解的聲明。
- package me.test;
- import java.lang.annotation.* ;//導(dǎo)入注解包中所有注解
- @Retention(RetentionPolicy.RUNTIME) //解釋如下
- @Target(ElementType.TYPE)//解釋如下
- public @interface MyAnnotation
- {
- }
- @Retention(RetentionPolicy.RUNTIME)
指定了注解保留的周期,注解的生命周期有是三個(gè),RetentionPolicy 枚舉的三個(gè)值代表了三個(gè)聲明周期,默認(rèn)是CLASS。
| 枚舉常量摘要 | |
|---|---|
CLASS編譯器將把注釋記錄在類文件中,但在運(yùn)行時(shí) VM 不需要保留注釋。 | |
RUNTIME編譯器將把注釋記錄在類文件中,在運(yùn)行時(shí) VM 將保留注釋,因此可以反射性地讀取。 | |
SOURCE編譯器要丟棄的注釋。 | |
@Target(ElementType.TYPE)
這個(gè)標(biāo)識注解應(yīng)該標(biāo)在那里ElementType的幾個(gè)枚舉值就代表了,注解應(yīng)該寫在的位置。
CONSTRUCTOR構(gòu)造方法聲明 |
FIELD字段聲明(包括枚舉常量) |
LOCAL_VARIABLE局部變量聲明 |
METHOD方法聲明 |
PACKAGE包聲明 |
PARAMETER參數(shù)聲明 |
TYPE類、接口(包括注釋類型)或枚舉聲明 |
2、 使用了注解的類或者方法。
- @MyAnnotation
- class A
- {
- }
3、 利用反射來操作注解,詳細(xì)見代碼。
Class類有一個(gè)方法:
| getAnnotation(Class annotationClass) |
這個(gè)方法接受一個(gè)注解的字節(jié)碼參數(shù) ,然后返回這個(gè)類所標(biāo)識的注解對象 ,因?yàn)槲覀儤?biāo)識了一個(gè)注解就相當(dāng)于產(chǎn)生了一個(gè)注解對象 。
boolean | isAnnotationPresent(Class extends Annotation> annotationClass) |
這個(gè)方法判斷一個(gè)類是否被注解所標(biāo)識。
下面是代碼示例:
MyAnnotationTest.java中
- package me.test;
- import java.lang.annotation.Annotation;
- @MyAnnotation
- public class MyAnnotationTest
- {
- public static void main(String []args)
- {
- if(MyAnnotationTest.class.isAnnotationPresent( MyAnnotation.class))
- {
- MyAnnotation an=(MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class) ;
- System.out.println(an.toString());
- }
- }
- }
MyAnnotation.java中
- package me.test;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.TYPE)
- public @interface MyAnnotation
- {
- }
原文鏈接:http://blog.csdn.net/yue7603835/article/details/7234786
【編輯推薦】
- Java類加載器以及類加載器的委托模型
- Java中Class對象詳解
- Java API設(shè)計(jì)清單
- Java遠(yuǎn)程方法調(diào)用RMI
- Java編程:常見問題匯總
當(dāng)前標(biāo)題:深入注解:在Java中設(shè)計(jì)和使用自己的注解
轉(zhuǎn)載源于:http://m.fisionsoft.com.cn/article/cososde.html


咨詢
建站咨詢
