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());//输出参数类型
}
}
}