你还不会反射吧,快来吧!!!

news2025/1/11 6:13:00

 首先:

 1.加载类:

//练习获取字节码对象的3种方式
//Class<Student> studentClass = Student.class;
//Class<? extends Student> aClass = new Student().getClass();
Class<?> clazz = Class.forName("TestT.Student");

 2.获取类的构造器:

//6.通过字节码对象获取目标类Student的构造方法
//Constructor<?>[] cs = clazz.getConstructors();
//for(Constructor str :cs ){
// System.out.println(str.getName());//打印本轮遍历到的构造方法的名字
// Class[] ps = str.getParameterTypes();//通过本轮遍历到的构造函数对象获取构造函数的参数类型
// System.out.println(Arrays.toString(ps));//打印参数类型
//}

//获得无参构造
Constructor<Student> de = stu.getDeclaredConstructor();
System.out.println(de.getName()+"->"+de.getParameterCount());

//获得全参数构造
Constructor<Student> de1 = stu.getDeclaredConstructor(String.class, int.class);
System.out.println(de1.getName()+"->"+de1.getParameterCount());

 3.获取类的构造器的作用:

调用无参构造

Class<Student> stu = Student.class;
//获得无参构造
        Constructor<Student> de = stu.getDeclaredConstructor();
        System.out.println(de.getName()+"->"+de.getParameterCount());
        de.setAccessible(true);//禁止检查权限访问
        Student student = de.newInstance();
        System.out.println(student);

调用有参数构造

Class<Student> stu = Student.class;
//获得全参数构造
        Constructor<Student> de1 = stu.getDeclaredConstructor(String.class, int.class);
        System.out.println(de1.getName()+"->"+de1.getParameterCount());
        Student student1 = de1.newInstance("小明", 18);
        System.out.println(student1);

4.获取类的成员变量:

获取类的全部成员变量:

Class<Student> stu = Student.class;
 //获取类的全部成员变量
        Field[] fields = stu.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field.getName()+"->"+field.getType());
        }

获取某个成员变量:

Class<Student> stu = Student.class;
 //获取某个成员变量
        Field name = stu.getDeclaredField("name");
        System.out.println(name.getName()+"->"+name.getType());

        Field age = stu.getDeclaredField("age");
        System.out.println(age.getName()+"->"+age.getType());

 5.获取成员变量的作用:

 为成员变量赋值和取值:

//为成员变量赋值
        Student s=new Student();
        name.setAccessible(true);
        name.set(s,"Java大牛");
        System.out.println(s);
        //取值
        String  n = (String)name.get(s);
        System.out.println(n);

 6.获取类的成员方法:

获取所有方法:

Class<Student> stu = Student.class; 
//获取类的方法:
        Method[] methods = stu.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println(method.getName()+"->"+
                    method.getParameterCount()+"->"+
                    method.getReturnType());

获取某个方法(无参数):

Class<Student> stu = Student.class; 
//获取某个方法(无参数)
        Method play = stu.getDeclaredMethod("play");
        System.out.println(play.getName()+"->"+
                play.getParameterCount()+"->"+
                play.getReturnType());

获取某个方法(有参数):

Class<Student> stu = Student.class; 
//获取某个方法(有参数)
        Method sunDay = stu.getDeclaredMethod("sunDay", int.class);
        System.out.println(sunDay.getName()+"->"+
                sunDay.getParameterCount()+"->"+
                sunDay.getReturnType());

7.获取类的成员方法的作用:

无参数:

        Student s=new Student();
//获取某个方法(无参数)
        Method play = stu.getDeclaredMethod("play");
        System.out.println(play.getName()+"->"+
                play.getParameterCount()+"->"+
                play.getReturnType());
        
        //成员方法的作用:
        Object invoke = play.invoke(s);
        System.out.println(invoke);

有参数:

        Student s=new Student();
        //获取某个方法(有参数)
        Method sunDay = stu.getDeclaredMethod("sunDay", int.class);
        System.out.println(sunDay.getName()+"->"+
                sunDay.getParameterCount()+"->"+
                sunDay.getReturnType());

        //成员方法的作用:
     
        Object invoke1 = sunDay.invoke(s, 1);
        System.out.println(invoke1);

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C++] 类与对象(上)

目录 1、前言 2、类的引入 3、类的定义 3.1 类的两种定义方式 4、类的访问限定符 5、类的作用域 6、类的实例化 7、类对象模型 7.1 内存对齐规则 7.1 类对象的存储方式 8、this指针 8.1 this指针的特性 8.2 this指针是否可以为空 1、前言 C语言是面向过程的&#…

网络运维基础问题及解答

前言 本篇文章是对于网络运维基础技能的一些常见问题的解答&#xff0c;希望能够为进行期末复习或者对网络运维感兴趣的同学或专业人员提供一定的帮助。 问题及解答 1. 列举 3 种常用字符编码&#xff0c;简述怎样在 str 和 bytes 之间进行编码和解码。 答&#xff1a;常用的…

Python读取多个栅格文件并提取像元的各波段时间序列数据与变化值

本文介绍基于Python语言&#xff0c;读取文件夹下大量栅格遥感影像文件&#xff0c;并基于给定的一个像元&#xff0c;提取该像元对应的全部遥感影像文件中&#xff0c;指定多个波段的数值&#xff1b;修改其中不在给定范围内的异常值&#xff0c;并计算像元数值在每一景遥感影…

【C++】-动态内存管理

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; 文章目录 前言一、C内存管理方式1.1 new/delete操作内置类型 总结 前言 今天再讲一个…

【禁用外键】为什么互联网大厂禁用外键约束?详谈外键的优缺点和使用场景

导航&#xff1a; 【Java笔记踩坑汇总】Java基础进阶JavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式常见面试题源码 目录 一、外键介绍 1.1 概述 1.2 练习 1.2.1 数据准备 1.2.2 验证有外键时&#xff0c;删除记录要维护外键 1.2…

Python批量下载主播照片,实现人脸识别, 进行颜值评分,制作颜值排行榜

昨晚一回家&#xff0c;表弟就神神秘秘的跟我说&#xff0c;发现一个高颜值网站&#xff0c;非要拉着我研究一下她们的颜值高低。 我心想&#xff0c;这还得要我一个个慢慢看&#xff0c;太麻烦了~ 于是反手用Python给他写了一个人脸识别代码&#xff0c;把她们的照片全部爬下…

06-行向量列向量_向量的运算 加法,数乘,减法,转置

行向量和列向量 行向量是按行把向量排开&#xff08;横着来写&#xff09;&#xff0c; 列向量是按列把向量排开&#xff08;竖着来写&#xff09; 在数学中我们更多的把数据写成列向量&#xff0c;在编程语言中更多的把数据存成行向量! 如果想在编程语言中把行向量转化成列…

人力资源管理系统servlet jsp人资企业办公java源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 人力资源管理系统ervlet jsp 系统有1权限&#xff1a…

【计算机网络】408统考2014年题36

题目描述 【2014年题36】主机甲与主机乙之间使用后退N帧(GBN)协议传输数据&#xff0c;甲的发送窗口尺寸为1000&#xff0c;数据帧长为1000字节&#xff0c;信道带宽为100Mbps&#xff0c;乙每收到一个数据帧就立即利用一个短帧&#xff08;忽略其传输延迟&#xff09;进行确认…

动态sql以及常用的标签

什么是动态sql&#xff1a; 指根据不同的条件生成不同的sql 搭建环境&#xff1a; 建表&#xff1a; create table blog( id varchar(50) not null comment 博客id, title varchar(100) not null comment 博客标题, author varchar(30) not null comment 博客作者, create_ti…

基于springboot+mybatis+mysql+vue+html民宿管理平台

基于springbootmybatismysqlvuehtml民宿管理平台 一、系统介绍二、功能展示1.首页2.个人中心3.民宿信息浏览(用户)4房间信息浏览&#xff08;用户&#xff09;5.房间预订&#xff08;用户&#xff09;6.房间退订&#xff08;用户&#xff09;7.投诉反馈&#xff08;用户&#x…

如何配置保存cpolar所建立的隧道参数?

文章目录 可以利用cpolar建立一个能发布到公共互联网的网页&#xff0c;这是基于我们直接对cpolar进行即时设置&#xff0c;获得了能在公共互联网上访问本地数据的二级子域名。但如果电脑关闭重启后&#xff0c;如何让电脑自动启动cpolar&#xff0c;并记住设置好的域名参数文件…

一文搞懂自动驾驶芯片TDA4 启动流程

文章目录 TDA4架构简介TDA4启动流程DMSC ROM阶段MCU域R5 ROM阶段SBL阶段 TDA4架构简介 TDA4是德州仪器推出的一款高性能、超异构的多核SoC&#xff0c;拥有ARM Cortex-R5F、ARM Cortex-A72、C66以及C71内核&#xff0c;可以部署AUTOSAR CP系统、HLOS(Linux或QNX)、图像处理以及…

tinkerCAD案例:23.Tinkercad 中的自定义字体

tinkerCAD案例&#xff1a;23.Tinkercad 中的自定义字体 原文 Tinkercad Projects Tinkercad has a fun shape in the Shape Generators section that allows you to upload your own font in SVG format and use it in your designs. I’ve used it for a variety of desi…

Python实现GA遗传算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世…

(文章复现)梯级水光互补系统最大化可消纳电量期望短期优化调度模型matlab代码

参考文献&#xff1a; [1]罗彬,陈永灿,刘昭伟等.梯级水光互补系统最大化可消纳电量期望短期优化调度模型[J].电力系统自动化,2023,47(10):66-75. 1.基本原理 1.1 目标函数 考虑光伏出力的不确定性&#xff0c;以梯级水光互补系统的可消纳电量期望最大为目标&#xff0c;函数…

递归求解汉诺塔问题(超详解)

问题提出 这个问题是关于三根柱子和一些圆盘的游戏。 初始时&#xff0c;所有的圆盘按照从大到小的顺序叠放在一根柱子上&#xff0c;目标是将所有圆盘从起始柱子移动到目标柱子上&#xff0c;在移动过程中&#xff0c;要满足以下规则喵&#xff1a; 每次只能移动一个圆盘。大圆…

混动才是未来?福特电车亏损数十亿美元,聚焦混动展望未来

福特汽车公司决定聚焦混合动力汽车&#xff0c;以弥补电动汽车市场亏损数十亿美元。吉姆法利首席执行官表示&#xff0c;在最新财报发布会上透露&#xff0c;未来将推出更多种类的混合动力车型。 福特最近公布了Q2盈亏情况&#xff0c;显示电动汽车部门的亏损有所增加。不过&am…

从源码角度配合网络编程函数accept() connect()等实现的客户端服务器通信 分析下 三握手四挥手都做了什么

首先我们先说下网络编程API&#xff1a; 数据在网络上通信&#xff0c;通信的双方一个是 客户端&#xff0c; 一个是 服务器 更具体来说&#xff0c;不是 客户端和服务器这两个机器在 经由互联网 进行通信&#xff0c; 而是 客户端上的某一进程 与 服务器端的某一进程 进…

vue3+ts未使用变量报错的解决

实例 问题原因 tsconfig.json文件中开启了ts语法检查 "strict": true, // 开启严格模式&#xff0c;检查类型声明和赋值...是否合法 "noUnusedLocals": true, // 检查是否存在未使用的变量 "noUnusedParameters": true, // 检查是否存在会使…