反射的基本步骤:
1,获得Class对象,就是获取到指定的名称的字节码文件对象。
2.实例化对象,获得类的属性,方法或构造函数。
3.访问属性,调用方法,调用构造函数创建对象。
获取Class对象的三个方法:
//1.第一种方式获取Class对象,根据getClass();
Object obj=new Person();
Class clazz1=obj.getClass();
//2.每一个基本数据类型都有一个class属性。
Class clazz2=Person.class;
//3.forname方法
String classname="cn.itcast.domain.Person";//来自配置文件 Class clazz3=Class.forName(classname);
//1.反射没有参数的方法。
Class clazz=Person.class;
Method method1=clazz.getMethod("sing",null);
Object obj=clazz.newInstance();
method1.invoke(obj,null);
//2.反射静态方法。
Method method2=clazz.getMethod("eat",null);
method2.invoke(null, null);
//3.反射多参数的方法。
Method method3=clazz.getMethod("study",String.class,int.class);
method3.invoke(obj, "李强",23);
//1.反射空参数的构造函数
Class clazz=Person.class;
Constructor c=clazz.getConstructor(null);
System.out.println(c.newInstance(null));
//2.反射有参数的构造函数
Constructor c1=clazz.getConstructor(String.class,String.class);
System.out.println(c1.newInstance("23","黎明").toString());
//1.反射所有属性
Class clazz=Person.class;
Field[] field=clazz.getDeclaredFields();
for(Field f:field)
{
System.out.println(f.getName());
}
//2.反射属性
Person p=new Person();
Field f=clazz.getDeclaredField("age");
f.setAccessible(true);//暴力反射
f.set(p, "23");
System.out.println(p.getAge());
|
|