如Class.forName(“java.lang.String”);
返回的是一个类
getName()
public String getName()返回由类对象表示的实体的名称
getSuperClass()
由该对象表示的类的超类
newInstance()
创建由此类对象表示的类的新实例。
getDeclaredFields()
返回的数组Field对象反映此表示的类或接口声明的所有字段类对象。
getDeclaredMethods
返回包含一个数组方法对象反射的类或接口的所有声明的方法
…
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Reflect_Test11 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
//包名.类名
Class c = Class.forName("java.lang.String");
//返回的是一个类
System.out.println(c.getName());
//获取父类 所有属性 所有方法 所有构造方法
//获取直接父类的class实例对象
Class c2 = Class.forName("java.lang.StringBuffer");
while(null!=c2) {
System.out.println(c2.getName());
c2 = c2.getSuperclass();
}
System.out.println("***************************");
Class cls = Class.forName("lang.Person");
//获取所有属性
Field [] fields = cls.getDeclaredFields();
for(Field f:fields) {
System.out.println(f);
System.out.println("修饰符:"+f.getModifiers()+"\t字段类型:"+f.getType().getName()+"\t字段名:"+f.getName());
}
System.out.println("***************************");
Method [] methods = cls.getDeclaredMethods();
for(Method m:methods) {
System.out.println(m);
System.out.println("修饰符:"+m.getModifiers()+"\t返回值类型:"+
m.getReturnType().getName()+"\t方法名:\t"+m.getName());
//获取方法中形参数据类型 一个方法可能有多个参数,所有返回的数组
Class [] types = m.getParameterTypes();
for(Class cc:types) {
System.out.println(cc+"\t");
}
System.out.println();
}
//利用反射技术创建一个Person对象 并给属性赋值 根据Class实例创建一个对象
Object obj = cls.newInstance(); //创建一个Person对象,底层调用的Person无参数的构造方法 Person per = new Person()
for(Method m :methods) {
if("setName".equals(m.getName())) {
m.invoke(obj, "张三"); //启动此方法 obj.setName("张三");
}else if("setAge".equals(m.getName())) {
m.invoke(obj, "aaa");
}
}
System.out.println(obj);
}
}
//输出
java.lang.String
java.lang.StringBuffer
java.lang.AbstractStringBuilder
java.lang.Object
***************************
private java.lang.String lang.Person.name
修饰符:2 字段类型:java.lang.String 字段名:name
private java.lang.String lang.Person.pwd
修饰符:2 字段类型:java.lang.String 字段名:pwd
***************************
public java.lang.String lang.Person.toString()
修饰符:1 返回值类型:java.lang.String 方法名: toString
public java.lang.String lang.Person.getName()
修饰符:1 返回值类型:java.lang.String 方法名: getName
public void lang.Person.setName(java.lang.String)
修饰符:1 返回值类型:void 方法名: setName
class java.lang.String
public java.lang.String lang.Person.getPwd()
修饰符:1 返回值类型:java.lang.String 方法名: getPwd
public void lang.Person.setPwd(java.lang.String)
修饰符:1 返回值类型:void 方法名: setPwd
class java.lang.String
Person [name=张三, pwd=null]