// 动态 操作类中信息
System.out.println(c.getName());// 获取类名
System.out.println(c.getPackage().getName());// 获取包名
System.out.println(c.getSuperclass().getName()); // 获取父类
Class[] cs=c.getInterfaces();// 获取 实现的接口
System.out.println(" 实现的接口数量为: "+cs.length);
for(Class inter:cs){
System.out.println(inter.getName());
}
Method[] ms = c.getMethods();// 获取公开方法:自定义 + 父类中
System.out.println("Student 类定义的方法数量为: "+ms.length);
for(Method m:ms){
System.out.println(m.getName());
}
System.out.println("--------------");
Method[] mds = c.getDeclaredMethods();// 获取自定义方法,包含非公开的
System.out.println("Student 类中自定义的方法为: "+mds.length);
for(Method m:mds){
System.out.println(m.getName());
}
System.out.println(" 获取属性: ");
Field[] fs = c.getDeclaredFields();// 获取自定义属性:包含非公开的
for (Field f:fs){
System.out.println(f.getName());
}
通过反射技术获取实例:
// 通过类对象 获取 类的对象
--- 采用无参数的构造方法获取对象
Class c = Class.forName("testflect.Student");
Object obj = c.newInstance();// 默认采用无参数的构造方法
Student s =(Student)obj;
s.setName(" 佳明 ");
s.setAge(28);
s.setScore(99.0);
System.out.println(obj);
-- 采用有参数的构造方法获取对象
System.out.println(" 利用有参数的构造方法获取对象: ");
Constructor con=c.getConstructor(String.class,Integer.class,Double.class);
Object obj2=con.newInstance(" 杨浩 ",37,88.0);
System.out.println(obj2);
// 利用反射技术操作私有化的方法
Method md=c.getDeclaredMethod("test");
md.setAccessible(true);
md.invoke(obj2);