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());