java 註解的幾大作用及使用方法詳解(完)

註解的作用:

1、生成文檔。這是最常見的,也是java 最早提供的註解。常用的有@see @param @return 等

2、跟蹤代碼依賴性,實現替代配置文件功能。比較常見的是spring 2.5 開始的基於註解配置。作用就是減少配置。現在的框架基本都使用了這種配置來減少配置文件的數量。以後java的程序開發,最多的也將實現註解配置,具有很大用處;

3、在編譯時進行格式檢查。如@override 放在方法前,如果你這個方法並不是覆蓋了超類方法,則編譯時就能檢查出。

 

使用方法詳解:

下面是註解類,其實註解也就是一個類文件

package annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import entity.PersonChiness;
/***
* Retention:保持、保留
* RetentionPolicy:政策、方針
* @author huawei
*@Retention
*1、指示註釋類型的註釋要保留多久。如果註釋類型聲明中不存在 Retention 註釋,則保留策略默認爲 RetentionPolicy.CLASS
*2、有三種取值(代表三個階段):
*RetentionPolicy.SOURCE:保留註解到java源文件階段,例如Override、SuppressWarnings
*RetentionPolicy.CLASS:保留註解到class文件階段,例如
*RetentionPolicy.RUNTIME:保留註解到運行時階段即內存中的字節碼,例如Deprecated
*/
//元註解:表示的是註解的註解,(同義詞有元信息、元數據)
//如果不加,javac會把這無用的註解丟掉
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})//指定該註解使用的用處:用在class上和用在方法體上。
public @interface HelloAnnotation {
//返回值是String類型
String color() default "藍色";//方法,但是相當於註解的屬性,即:當成屬性賦值,當成方法調用。
//默認value
String value();

String author() default "默認給定了屬性";
//返回值是數組對象
int[] arrayAttr() default {1};
//返回值是註解類型
MetaAnnotation annotationAttr() default @MetaAnnotation("");
//返回CLASS對象
Class<PersonChiness> classType() default PersonChiness.class;
}

 

 

下面是實現註解的測試類:

package annotation;

/***
* 註解類:
* 1、相當於一種標記,加上註解就等於爲程序打上了某種標記,沒加,則等於沒加某種標記,
* 2、以後javac編譯器、開發工具或其他應用程序可以通過反射來了解你的類,以及各種元素上有無何種標記,
* 看你有什麼標記,就去執行相應的命令和幹相應的事。
* 3、標記用處地方:
* 加在包、類、字段、方法、方法的參數、局部變量
* @author huawei
*
*/
//自定義註解
@HelloAnnotation(color="紅色",
value="如果只有value屬性!可以不寫屬性名和等於號,直接寫值即可!",
arrayAttr={1,2,3},
annotationAttr=@MetaAnnotation("返回註解類型規範形式。"))
public class AnnotationTest {
@SuppressWarnings("deprecation")//阻止警告
@HelloAnnotation("當爲value屬性時,可以省掉屬性名和等於號。")
public static void main(String[] args) throws Exception{
System.runFinalizersOnExit(true);

if(AnnotationTest.class.isAnnotationPresent(HelloAnnotation.class)){
HelloAnnotation helloAnnotation =
(HelloAnnotation)AnnotationTest.class.getAnnotation(HelloAnnotation.class);
System.out.println("color(): "+helloAnnotation.color());
System.out.println("value(): "+helloAnnotation.value());
System.out.println("author(): "+helloAnnotation.author());
System.out.println("arrayAttr(): "+helloAnnotation.arrayAttr().length);
System.out.println("annotationAttr(): "+helloAnnotation.annotationAttr().value());
System.out.println("classType(): "+helloAnnotation.classType().newInstance().sayHello("hello,ketty"));
}
}
@Deprecated//自定義:備註過時的方法信息
public static void sayHello(){
System.out.println("hello,world");
}
}

發佈了37 篇原創文章 · 獲贊 19 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章