程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java注解,java注解原理

java注解,java注解原理

編輯:JAVA綜合教程

java注解,java注解原理


注解是什麼?

注解是一種語言形式而已,類似於接口、枚舉這些語言形式。

package test.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import test.TestEnum; /** * 注解示例 * @author liujl * */ @Target({ElementType.METHOD,ElementType.TYPE})//可以寫在方法上,也可以寫在類上 @Retention(RetentionPolicy.CLASS) //注解性質,保留到運行期。.java-->javac-->.class--java-->類裝載器裝載-->進入"運行期" public @interface ITCastAnnotation { String color() default "blue";//注解屬性類型--字符串類型 String value();//一個特殊的注解屬性類型,可以默認不寫 int[] arrayAttr() default {1,2,3};//注解屬性類型--數組類型 TestEnum.Triffic lamp() default TestEnum.Triffic.RED; MetaAnnotation annotationAttr() default @MetaAnnotation("lhm");//注解屬性類型--注解類型 Class clazz() default String.class;//注解屬性類型--Class類型 }

 

 

 

使用自己定義的注解 AnnotationTest.java
package test.annotation;

@ITCastAnnotation(annotationAttr=@MetaAnnotation(value="fxx") ,value="111",arrayAttr={2,3,4})
public class AnnotationTest {
	public static void main(String[] args)throws Exception {
		System.runFinalizersOnExit(true);
		if(AnnotationTest.class.isAnnotationPresent(ITCastAnnotation.class))
		{
			ITCastAnnotation ia=AnnotationTest.class.getAnnotation(ITCastAnnotation.class);
			System.out.println(ia.value());
			System.out.println(ia.color());
			
			int[] arrayAttr=ia.arrayAttr();
			for(Integer i:arrayAttr){
				System.out.print(i+" ");
			}
			System.out.println();
			
			System.out.println(ia.lamp().nextDeng());
			
			System.out.println(ia.annotationAttr().value());
			
			System.out.println(ia.clazz());
		}
	}
}

 

 

TestEnum.Triffic 是一個枚舉類,代碼如下
package test;

public class TestEnum {
	public static void main(String[] args) {
		Triffic tr=Triffic.GREEN;
		System.out.println(tr+"  下一個燈是: "+tr.nextDeng());
	}
	
	public enum Triffic{
		RED (400){
			@Override
			public Triffic nextDeng() {
				return GREEN;
			}
		},
		GREEN (200){
			@Override
			public Triffic nextDeng() {
				return YELLOW;
			}
		},
		YELLOW(10) {
			@Override
			public Triffic nextDeng() {
				return RED;
			}
		};
		
		public abstract  Triffic nextDeng();
		int time;
		private Triffic(int time){
			this.time=time;
		}
		public int getTime() {
			return time;
		}
		
		public String toString(){
			
			return this.name()+":"+this.time;
		}
	}
	
	
}

 

MetaAnnotation.java 是一個自定義的元注解 ,在ITCastAnnotation 中作為注解的一個屬性值類型而存在
package test.annotation;
/**
 * 定義一個元注解
 * @author liujl
 *
 */
public @interface MetaAnnotation {
	String value();
}

 

運行結果:

111
blue
2 3 4
GREEN:200
fxx
class java.lang.String

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved