类装载:classLoader加载class文件到内存中,并创建class对象;
链接:(验证、准备、解析)验证内部结构、类变量分配空间且初始化默认值、符号引用替换到直接引用;
初始化:初始化类变量;
http://blog.csdn.net/gjanyanlig/article/details/6818655
Class类:用来描述类的内部结构的类。Class对象:包含一个类内部结构信息的对象。
package classLoadAndReflect; import classLoadAndReflect.MyClassLoader; import java.lang.Class; import java.lang.reflect.Field; import java.lang.reflect.Method; public class MyReflect { public static void main(String[] args) throws Exception { // 获取类的Class对象,包含类的“结构信息” Class c1 = Class.forName("classLoadAndReflect.MyClassLoader"); Class c2 = MyClassLoader.class; Class c3 = (new MyClassLoader()).getClass(); System.out.println(c1.getName()); //通过Class对象创建类的实例 MyClassLoader loader = (MyClassLoader) c1.newInstance(); loader.A(222); //通过Class对象创建Method对象,利用“主调对象”调用方法 Method method = c1.getMethod("A", int.class); method.invoke(loader, 11111); //通过Class对象创建Field对象,设置“对象”成员变量的值 Field field = c1.getDeclaredField("a"); field.setInt(loader, 8888); //获取方法上的注解信息 MyAnnotation annotation = method.getAnnotation(MyAnnotation.class); String description = annotation.getDescribe(); System.out.println(description); } } classLoadAndReflect.MyClassLoader 222 11111 默认注解通过自定义注解,可以在类、方法上添加控制信息。
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyAnnotation { public String getDescribe() default "默认注解"; } @MyAnnotation(getDescribe = "后来添加在方法上的注解") public void A(int x){ System.out.println(x); } //获取方法上的注解信息 MyAnnotation annotation = method.getAnnotation(MyAnnotation.class); String description = annotation.getDescribe(); System.out.println(description);http://gityuan.com/2016/01/23/java-annotation/
http://www.jianshu.com/p/a08e7e9ed765