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