学习Java的反射机制跟Annotation

学习Java的反射机制和Annotation
1、创建一个Annotation类JavaAnnotation.java。
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface JavaAnnotation {
	String value(); 
}


2、创建测试类。
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 学习java的反射机制
 * 
 * @author sunny
 * 
 */
public class ReflectTest {

	@JavaAnnotation("字段注释")
	public String field1;

	private String filed2;

	public String getFiled2() {
		return filed2;
	}

	public void setFiled2(String filed2) {
		this.filed2 = filed2;
	}

	public String getField1() {
		return field1;
	}

	public void setField1(String field1) {
		this.field1 = field1;
	}

	private void act() {
		System.out.println("do nothing here......");
	}

	public static void main(String[] args) {
		try {
			Class a = Class.forName("ReflectTest");

			// 列举该类的所有字段
			Field[] fileds = a.getDeclaredFields();
			for (int i = 0; i < fileds.length; i++) {
				System.out.println(i + " - " + fileds[i].toString());
			}
			System.out.println("////////////////////字段列举完毕");

			// 列举该类的所有方法
			Method[] methods = a.getDeclaredMethods();
			for (int i = 0; i < methods.length; i++) {
				System.out.println(i + " - " + methods[i].toString());
			}
			System.out.println("////////////////////方法列举完毕");

			// 调用类方法
			try {
				// 通过默认构造方法创建一个新的实例对象
				Object instance = a.getConstructor(new Class[] {}).newInstance(
						new Object[] {});
				Method m = a.getDeclaredMethod("act");
				m.invoke(instance, new Object[] {});
				System.out.println("////////////////////方法调用完毕");

			} catch (Exception e) {
				e.printStackTrace();
			}

			// 操作Annotation
			try {
				Field f = a.getDeclaredField("field1");
				if (f.isAnnotationPresent(JavaAnnotation.class))
					System.out.println("JavaAnnotation of field1 is '"
							+ f.getAnnotation(JavaAnnotation.class).value()
							+ "'");

			} catch (Exception e) {
				e.printStackTrace();
			}
		} catch (ClassNotFoundException e2) {
			e2.printStackTrace();
		}
	}
}