反射

package com.test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;


class Student{
	public String name = "afd";
	public String sex;
	public String tel;

	
	public static void print(String name, int lv){
		System.out.println("name = " + name + ":" + lv );
	}
}

/**
 * 
 * @author 
 * @date 2015年6月7日 下午2:43:11
 * @version 版本号码
 * @TODO 描述
 * 什么是class对象:编写一个新的java类的时候,JVM会把Java类编译成class对象,放在.class文件中,
 * 				在运行的时候,如果需要这Java类的对象,JVM会检查.class文件是否已经装载到内存中,如果已经装载,就根据
 * 				.class文件 生成一个实例对象
 * 生成class对象的方法:1.类名.class 2.Class.forName("类名")  3.实例对象.class
 */
public class Reflaction {

	public static void main(String[] args) throws Exception {
		Class a = Student.class;
//		Class b = new Student().getClass();
//		Class c = Class.forName("Student");
		Field fieldName = a.getField("name");
		Object o = fieldName.get(new Student());
		System.out.println(o.toString());
		
		invokeMethod(a);
	}
	
	public static void invokeMethod(Class clazz) throws Exception{
		Method[] methods = clazz.getDeclaredMethods();//获取公开的方法
		for (Method m : methods){
			Class[] p = m.getParameterTypes();//获取方法参数的类型
			m.invoke(null, "小张",11);//调用方法, 如果调用的静态方法 不需要 实例对象(null)
			System.out.println(clazz.isInstance(new Student()));//判断 对象是不是某个类的实例
			System.out.println(methods.length);
			System.out.println(p[0].getName());//输出参数类型
		}
	}

}

 

posted @ 2015-06-07 16:48  99°的开水  阅读(115)  评论(0编辑  收藏  举报