java註解10分鐘精通


java內置了三種註解,定義在java.lang包中。 


@Override 表示當前方法是覆蓋父類的方法。 
@Deprecated 表示當前元素是不贊成使用的。 
@SuppressWarnings表示關閉一些不當的編譯器警告信息。
以下介紹SuppressWarnings的一些參數
1、deprecation 使用了不贊成使用的類或方法時的警告
2、unchecked 執行了未檢查的轉換時警告
3、fallthrough 當使用switch操作時case後未加入break操作,而導致程序繼續執行其他case語句時出現的警告
4、path 當設置一個錯誤的類路徑、源文件路徑時出現的警告
5、serial 當在可序列化的類上缺少serialVersionUID定義時的警告
6、fianally 任何finally子句不能正常完成時警告
7、all 關於以上所有情況的警告


接下來利用一個註解實例來體驗註解的處理過程


import java.lang.annotation.Documented;     
 import java.lang.annotation.Inherited;     
 import java.lang.annotation.Retention;     
 import java.lang.annotation.Target;     
 import java.lang.annotation.ElementType;     
 import java.lang.annotation.RetentionPolicy;     
     
 /*   
  * 元註解@Target,@Retention,@Documented,@Inherited   
  *    
  * @Target 表示該註解用於什麼地方,可能的 ElemenetType 參數包括:   
  * ElemenetType.CONSTRUCTOR 構造器聲明   
  * ElemenetType.FIELD 域聲明(包括 enum 實例)   
  * ElemenetType.LOCAL_VARIABLE 局部變量聲明   
  * ElemenetType.METHOD 方法聲明   
  * ElemenetType.PACKAGE 包聲明   
  * ElemenetType.PARAMETER 參數聲明   
  * ElemenetType.TYPE 類,接口(包括註解類型)或enum聲明   
  *            
  * @Retention 表示在什麼級別保存該註解信息。可選的 RetentionPolicy 參數包括:   
  * RetentionPolicy.SOURCE 註解將被編譯器丟棄   
  * RetentionPolicy.CLASS 註解在class文件中可用,但會被VM丟棄   
  * RetentionPolicy.RUNTIME VM將在運行期也保留註釋,因此可以通過反射機制讀取註解的信息。   
  *            
  *@Documented 將此註解包含在 javadoc 中   
  *        
  *@Inherited 允許子類繼承父類中的註解   
  *      
  */    
 @Target(ElementType.METHOD)     
 @Retention(RetentionPolicy.RUNTIME)     
 @Documented    
 @Inherited    
 /*   
  * 定義註解 Test   
  * 註解中含有兩個元素 id 和 description   
  * description 元素 有默認值 "no description"   
  */    
 public @interface Test {     
     public int id();     
     public String description() default "no description";     
 }    

下面是一個使用註解和解析註解的實例

     

package al.annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class Test_1 {

	@Test(id=1,description="m1")
	public void method_1() {
		
	}
	@Test(id=2,description="m2")
	public void method_2() {
		
	}
	@Test(id=3,description="m3")
	public void method_3() {
		
	}
	public static void main(String[] args) {
		
		try {
			
			Method[] me = Class.forName("al.annotation.Test_1").getMethods();
			for( Method m:me){
				
				Annotation[] ann = m.getAnnotations();
				
				for(Annotation a:ann){
					
					System.out.println(((Test)a).id());
					System.out.println(((Test)a).description());
				}
			}
			
		   
		
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
輸出結果

1
m1
2
m2
3
m3



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章