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();2getDeclaredFields()获取类中全部属性包括私有属性

8.如何通过反射调用类中方法

 c=Class.forName("edu.day1.BookReading");//Class对象
 Method method=c.getMethod("类名");
 method.invoke(c.newInstance);

猜你喜欢

转载自blog.csdn.net/m0_59416550/article/details/126838712