import java.util.*; import java.lang.reflect.*; public class ListDemo { public static void main(String[] args) throws Exception{
ArrayList<String> array = new ArrayList<String>(); array.add("asdf"); array.add("dgfer"); //获取ArrayList类的字节码文件对象 Class clazz = array.getClass(); //获取添加方法add Method method = clazz.getMethod("add", Object.class); method.invoke(array, 123); method.invoke(array, 12.34); method.invoke(array, true); System.out.println(array); Iterator it = array.iterator(); while(it.hasNext()){ System.out.println(it.next()); } for(Object s : array){ System.out.println(s); }
} } 获取字节码文件对象的三个方法,返回Class类型:
对象的获取;
类名获取.class
Class.forName() 获取,一般常用这个,也推荐使用这个方法
Class.forName()举例代码:
public class ReflectDemo { public static void main(String[] args) throws Exception{ //第一种方式,通过对象获取 Person p = new Person(); //Object类中有一个方法 getClass()返回值是 Class类型 Class c1 = p.getClass(); System.out.println(c1);
//第二种方式,通过类的静态属性class获取,返回这个类的Class类型,字节码文件对象 Class c2 = Person.class; System.out.println(c2);
//第三种方式,通过Class类的静态方法forName获取--最重要 Class c3 = Class.forName("cn.itcast.reflect.Person"); System.out.println(c3); } } Constructor类:
newInsurance(构造方法的实际参数)创建对象 代码: package cn.itcast.reflect; /* * 获取构造方法并运行 */ import java.lang.reflect.*; public class ReflectDemo1 { public static void main(String[] args) throws Exception{
method_2(); } //获取构造方法的简单运行,保证类中有public空参数构造 private static void method_2()throws Exception{ Class c = Class.forName("cn.itcast.reflect.Person"); Object obj = c.newInstance(); System.out.println(obj); }
//获取私有构造方法,并运行 private static void method_1()throws Exception{ Class c = Class.forName("cn.itcast.reflect.Person"); // Constructor<?>[] getDeclaredConstructors() /*Constructor[] cons = c.getDeclaredConstructors(); for(Constructor con : cons){ System.out.println(con); }*/ //获取私有的,带有String,int参数构造 Constructor con = c.getDeclaredConstructor(String.class,int.class); System.out.println(con); con.setAccessible(true); Object obj = con.newInstance("zhangsan",18); System.out.println(obj); }
//获取的构造方法,是public private static void method()throws Exception{ Class c = Class.forName("cn.itcast.reflect.Person"); //Constructor[] getConstructors /*Constructor[] cons = c.getConstructors(); for(Constructor con : cons){ System.out.println(con); }*/ //获取空参数的构造方法,并运行 Constructor con = c.getConstructor(); System.out.println(con); Object obj = con.newInstance(); System.out.println(obj.toString());