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 篇原創文章 · 獲贊 9 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章