反射实例展示

反射的作用:

.反射类的作用

  • 动态获取:动态获取类或对象的属性和方法
  • 动态调用:动态调用对象的属性和方法

3.反射的使用场景

  • 操作因访问权限限制的属性和方法; 例如 依赖问题 引用不到不能直接获取 获取私有属性引用不到
  • 实现自定义注解;
  • 动态加载第三方jar包
  • 按需加载类,节省编译和初始化时间;

class类的介绍 就是一个描述类的结果普通类

已知具体的类,通过类的 class 属性获取

Class clazz = Person.class;
1
已知某个类的实例,调用该实例的 getclass() 方法获取 Class 对象

Person p1 = new Person();
Class clazz = p1.getclass();
1
2
已知一个类的全类名,且该类在类路径下,可通过 Class 类的静态方法 forName() 获取,可能抛出 ClassNotFoundException(比较常用)

Class clazz = Class.forName(“com.test.Person”);
1
通过类加载器

ClassLoader cl = Person.getclass().getClassLoader();
Class clazz = cl.loadClass(“com.test.Person”);
————————————————
版权声明:本文为CSDN博主「Empty-cup」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_17310871/article/details/124614868

public class User {

    private String name;
    private int age;

    public User() {

    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}
public static void main(String[] agrs) {

        try {
            Class clazz = Class.forName("test.User");

            //无参构造方法
            Constructor con = clazz.getDeclaredConstructor();
            Object obj = con.newInstance();

            Method getNameMethod = clazz.getDeclaredMethod("getName");
            Method setNameMethod = clazz.getDeclaredMethod("setName", String.class);

            //
            System.out.println(getNameMethod.invoke(obj));

            setNameMethod.invoke(obj, "小米");

            System.out.println(getNameMethod.invoke(obj));
            System.out.println("===========================");
            System.out.println(getNameMethod.invoke(obj, null));
            System.out.println("===========================");

            //有参构造方法
            Constructor con1 = clazz.getDeclaredConstructor(String.class, int.class);
            Object obj1 = con1.newInstance("小牧", 30);
            System.out.println(getNameMethod.invoke(obj1));

            //字段  有set和get 方法  注意setAccessible
            Field nameField = clazz.getDeclaredField("name");
            nameField.setAccessible(true);
            System.out.println(nameField.get(obj1));

            nameField.set(obj1, "4445");
            System.out.println(nameField.get(obj1));

            nameField.setAccessible(false);

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

结果:

null
小米
===========================
小米
===========================
小牧
小牧
4445

Original: https://blog.csdn.net/shuangrenlong/article/details/128425595
Author: shuangrenlong
Title: 反射实例展示

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/788346/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • conda命令说明

    参考: 以管理员身份启动Anaconda Prompt:升级conda(升级Anaconda前需要先升级conda):conda update conda升级anaconda:co…

    Python 2023年9月7日
    062
  • Python数据挖掘 数据预处理案例(以航空公司数据为例)

    Python数据预处理 一、内容: 1、数据清洗2、数据集成3、数据可视化 二、实验数据 根据航空公司系统内的客户基本信息、乘机信息以及积分信息等详细数据,依据末次飞行日期( LA…

    Python 2023年10月7日
    090
  • pytest 学习记录

    安装pytest-sugar插件可以看到进度条 pytest 运行模式, -v 用于显示每个测试函数的执行结果-q 只显示整体测试结果-s 用于显示测试函数中print()函数输出…

    Python 2023年9月14日
    038
  • Django+Celery的某个任务撤销

    前提:需要做个对某个任务暂停(撤销)的同时且不影响其他任务继续执行的功能 查找资料得知celery3.0版本后加有 revoke 功能 celery的官方文档对revoke的描述 …

    Python 2023年8月5日
    079
  • 通过AndroidJUnit4框架发现用例不会按顺序执行,变成随机了

    接上一篇所有错误修改完成后并成功编译成功。 开始整体运行时,发现执行的用例并未按照顺序去执行,变成随机了。此时需要在类前面加上对应的注解,指定用例的执行顺序 @FixMethodO…

    Python 2023年6月11日
    057
  • juypter 不省略_常用pandas清洗数据命令

    pandas清洗数据常用命令 安装jupyter notebook 启动 jupyter 可以在里面编写python代码 1、 加载数据df = pd.DataFrame(pd.r…

    Python 2023年8月21日
    053
  • Python视频处理(2)——Flask网页开发+分镜

    目录 一、主程序基本结构 1、安装并导入Flask 2、创建Flask对象(很重要的一步,不能忘记) 3、编写主程序 4、路由 5、完整代码 二、渲染网页 三、定义分镜相关函数 1…

    Python 2023年8月10日
    046
  • 深度学习入坑篇-池化及numpy实现

    前言 卷积神经网络(ConvNets或CNNs)作为一类神经网络,托起cv的发展,本文主要介绍卷积神经网络的另外一个操作——池化操作,其原理,并以小白视角,完成池化从0到1的num…

    Python 2023年8月28日
    043
  • torch.from_numpy().permute()函数《pytorch学习篇》

    1.permute()函数 首先这个函数主要使用于维度转换,作用:按照指定的方式,对原数据进行排列,一般用于图像的通道数变换。(what?什么什么?没听明白?你说的是。。。) 再来…

    Python 2023年8月26日
    072
  • Python基础知识入门(二)

    Python基础知识入门(一) Python基础知识入门(三) Python基础知识入门(四) Python基础知识入门(五) 一、数字类型 Python 数字数据类型用于存储数值…

    Python 2023年8月3日
    053
  • 手把手带你入门 API 开发

    引言 在本文中,您将学习如何使用Flask、SQLite 3(轻易数据库)和 JSON 创建用于数据通信的 REST API。 本文使用 4 个最常用的 HTTP 动词:GET、P…

    Python 2023年8月9日
    077
  • Docker容器学习七之Docker-Compose

    一、安装compose 当我在进行docker容器管理的时候,针对打个容器,比较好操作,如果容器过多,各种不一样的容器怎么进行同一管理,这尤为重要,所以compose,技术可以帮我…

    Python 2023年8月12日
    069
  • 使用Matplotlib进行数据可视化(一)

    前言 本篇为《使用Python进行数据分析》中介绍Matplotlib库的基础使用方法的第一篇,主要内容为使用Matplotlib库的一些常用技巧,绘画简易的线形图、散点图、密度图…

    Python 2023年9月3日
    078
  • Python | conda 常用命令以及如何在 conda 环境中使用 pip

    conda 常用命令以及如何在 conda 环境中使用 pip 1. conda 查看版本 2. conda 获取帮助 3. conda 自动激活 4. conda 包管理 5. …

    Python 2023年9月8日
    083
  • Arrays.asList()你真的知道怎么用吗?

    发现问题 前几天在看别人的项目的时候,发现一个问题,简单复现一下这个问题 // 注意这是一个Integer对象的数组哦 Integer[] arr = new Integer[]{…

    Python 2023年10月23日
    046
  • 哈撒给,英雄联盟全皮肤下载器来了

    这是通过博主写的英雄联盟下载器下载的部分的英雄皮肤,可以看一下效果。每个英雄的皮肤的会自动根据英雄名称创建相应的文件夹存放。 【阅读全文】 完整源代码请阅读到文末获取……

    Python 2023年11月9日
    046
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球