Java反射机制应用
1.反射机制
即通过实例化对象获取所属类的信息。
2.如何获取类结构
(1)Constructor类
获取类中的构造方法
(2)Field类
获取类中的属性
(3)Method类
获取类中的方法
3.如何获取父类
c=Class.forName("edu.day1.BookReading");//Class对象
Class<?> c1=c.getSuperclass();
System.out.println("获取父类的名称:"+c.getSuperclass());
4.如何获取类实现的全部接口
c=Class.forName("edu.day1.BookReading");//Class对象
Class<?> w[]=c.getInterfaces();//获取接口的方法
for (int i=0;i<w.length;i++)
System.out.println("实现的接口名称:"+w[i].getName());
5.如何获取类全部构造方法及相关信息
定义了几个构造方法,就返回几个构造方法的信息
c=Class.forName("edu.day1.BookReading");//Class对象
Constructor<?> constructor[] =null;//此处获得对象数组
constructor=c.getConstructors();//获取BookReading类的全部构造方法
for(int i=0;i<constructor.length;i++){
//获取构造方法参数信息
Class<?> p[]=constructor[i].getParameterTypes();
//获取构造方法权限
System.out.print("构造方法权限:"+constructor[i].getModifiers()+" ");
//获取构造方法名称
System.out.print(constructor[i].getName()+"(");
//打印参数信息
for(int j=0;j<p.length;j++){
System.out.print(p[j].getName()+" ");
if(j<p.length-1){
System.out.print(",");
}
}
System.out.print(")");
}
6.如何获取类全部方法
Method method[]=c.getMethods();
for(int i=0;i<method.length;i++){
//获取返回值类型
Class<?> turn=method[i].getReturnType();
//获取参数类型
Class<?> para[]=method[i].getParameterTypes();
//获取修饰符权限
int limit=method[i].getModifiers();
//还原修饰符权限
System.out.println("修饰符权限为:"+ Modifier.toString(limit));
//获取方法抛出异常
Class<?> abnormal[]=method[i].getExceptionTypes();
if(abnormal.length>0){
System.out.println("异常为:");
}
for(int j=0;j<abnormal.length;j++){
System.out.println(abnormal[j].getName());
if(j<abnormal.length-1)
System.out.println(",");
}
}
7.如何获取类全部属性
(1)getFields()可以获取类,及实现的接口或继承的父类的公有属性
如:
Field f[]=c.getFields();
(2)getDeclaredFields()获取类中全部属性包括私有属性
8.如何通过反射调用类中方法
c=Class.forName("edu.day1.BookReading");//Class对象
Method method=c.getMethod("类名");
method.invoke(c.newInstance);