• 学习笔记—反射


    反射的概念和作用

    概念

      动态获取信息以及动态调用对象方法的一种反射机制。可以在程序运行时动态的获取类的属性、方法和构造器。

    作用

      可以动态的创建对象,不需要导入类的所在包,只需要知道类的完整路径就可以知道该类中的所有信息。

    反射获取类的三种方式

    1、根据全限定路径获取

    Class.forName("路径");

    2、根据对象获取

    对象名.getClass();

    3、根据类名获取

    类名.class;

     注意:一个类只有一个类对象。

    常用方法:

            System.out.println("获取类对象的包名:" + c.getPackage());
            System.out.println("获取类的修饰符:" + c.getModifiers());
            System.out.println("获取类的名称(全限定):" + c.getName());
            System.out.println("获取类的名称(类名):" + c.getSimpleName());
            System.out.println("获取类的父类的类对象:" + c.getSuperclass());

    反射操作属性

    获取该类及其所有父类的所有公共字段

    // 获取该类及其所有父类的所有公共字段
    Field[] fields = c.getFields();        
    for(Field f : fields) {
        System.out.println("获取属性名:" + f.getName());
        System.out.println("获取修饰符" + f.getModifiers());
        System.out.println("获取类型" + f.getType());        //返回的是类型的Class对象
    }

     获取该类声明的所有字段

            // 获取该类声明的所有字段
            Field[] fieldall = c.getDeclaredFields();
            for(Field f : fieldall) {
                System.out.println("获取属性名:" + f.getName());
                System.out.println("获取修饰符" + f.getModifiers());
                System.out.println("获取类型" + f.getType());        //返回的是类型的Class对象
            }

    获取指定字段

            // 指定获取类及其父类的公共字段
            Field field = c.getField("pname");    
            
            // 指定获取类的所有字段
            Field field2 = c.getDeclaredField("snull");        
            
            // 指定获取父类声明字段
            Field field3 = c.getSuperclass().getDeclaredField("pname");    

    操作类属性

    // 操作静态属性
            类属性对象.get(null)        // 返回静态属性的值
            类属性对象.set(null,"")    // 赋值
    // 操作非静态属性
            类属性对象.get(Object obj);
            类属性对象.set(Object obj,"");

    反射操作方法

    获取该类及其所有父类的所有公共方法

            // 获取所有的公共方法(包括父类)
            Method[] methods = c.getMethods();
            for(Method method:methods) {
                System.out.println(method.getName());
            }

    获取该类声明的所有方法

            // 获取所有声明的方法(不包括父类)
            Method[] methodall= c.getDeclaredMethods();
            for(Method method:methodall) {
                System.out.println(method.getName());
            }

    获取指定方法

    // 获取指定的公共方法
    getMethod(String name, Class ... cla);
    
    // 获取指定的方法
    getDeclaredMethod(String name,Class ... cla);
    
    /**  参数
      * String : name   表示方法名
      * Class ... cla 表示方法接收的参数类型的类对象
      *
    */
  • 相关阅读:
    Python-文件处理
    自动化测试框架(一)
    Turbine Netflix
    java基础笔记-日常问题总结不定期更新
    集合类库上(list,queue)
    日期相关类
    迭代与JDB
    团队组建——日渐消瘦队~
    结对学习感想
    实验一《Java开发环境的熟悉》_实验报告
  • 原文地址:https://www.cnblogs.com/shangyang/p/10595353.html
Copyright © 2020-2023  润新知