java反射机制

java反射机制

  • 方法四要素
  • 使用反射机制获取方法并调用方法

方法四要素

不使用反射机制调用一个方法需要几个要素的参与?

例:
SystemService.java

package com.w.spring6.reflection;

public class SystemService {

    public void logout(){
        System.out.println("退出系统");
    }

    public boolean login(String username, String password){
        if ("admin".equals(username) && "123".equals(password)) {
            return true;
        }
        return false;
    }
}

编写程序调用方法:
ReflectTest01.java

package com.w.spring6.reflection;

public class ReflectTest01 {

    public static void main(String[] args) {

        // 创建对象
        SystemService systemService = new SystemService();

        // 调用方法并接收方法的返回值
        boolean success = systemService.login("admin", "123");

        System.out.println(success ? "登陆成功" : "登录失败");

    }

}

运行结果:
在这里插入图片描述
通过上面例子可以看出,调用一个方法,一般涉及到4个要素:
调用哪个对象的(systemService)
哪个方法(login)
传什么参数(“admin”, “123”)
返回什么值(success)

使用反射机制获取方法并调用方法

SystemService.java

package com.w.spring6.reflection;

public class SystemService {

    public void logout(){
        System.out.println("退出系统");
    }

    public boolean login(String username, String password){
        if ("admin".equals(username) && "123".equals(password)) {
            return true;
        }
        return false;
    }

    public boolean login(String password){
        if("117".equals(password)){
            return true;
        }
        return false;
    }

}

接下来获取到 logout()、login(String,String)、login(String) 这三个方法,并调用它们

测试程序:
ReflectTest02.java

package com.w.spring6.reflection;

import java.lang.reflect.Method;

public class ReflectTest02 {
        public static void main(String[] args) throws Exception{
            //创建对象
            Class clazz = Class.forName("com.w.spring6.reflection.SystemService");
            Object obj = clazz.newInstance();
            //获取方法login(String,String)
            Method loginMethod = clazz.getDeclaredMethod("login", String.class, String.class);
            //调用方法
            Object retValue = loginMethod.invoke(obj, "admin", "123");
            System.out.println(retValue);
        }

//        //创建对象
//        Class clazz = Class.forName("com.w.spring6.reflection.SystemService");
//        Object obj = clazz.newInstance();
//        //获取方法login(String,String)
//        Method loginMethod = clazz.getDeclaredMethod("login", String.class);
//        //调用方法login(String)
//        Object retValue = loginMethod.invoke(obj, "117");
//        System.out.println(retValue);

}

在这里插入图片描述
ReflectTest03.java

package com.w.spring6.reflection;

import java.lang.reflect.Method;

public class ReflectTest03 {
    public static void main(String[] args) throws Exception{
        //创建对象
        Class clazz = Class.forName("com.w.spring6.reflection.SystemService");
        Object obj = clazz.newInstance();
        //获取方法login()
        Method logoutMethod = clazz.getDeclaredMethod("logout");
        //调用无参方法
        logoutMethod.invoke(obj);

    }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

质量管理工作难做,为什么还有那么多人还继续做?

理解质量管理的挑战 在当今商业环境中,质量管理工作是一项充满挑战的使命。然而,尽管面对种种困难,却有着越来越多的人愿意踏上这条坎坷之路。为何质量管理工作如此艰难,却依旧吸引无数人投身其中呢? 内外动因交融 内…

【23真题】坑挖的不错,题目也有质量!

今天分享的是23年西安石油大学810的信号与系统试题及解析。 本套试卷难度分析:22年西安石油810考研真题,我也发布过,若有需要,戳这里自取!本套试题内容难度中等偏下,题量较少,没有考察选填题,通…

刚刚!奥特曼终于透露了GPT-5的最新消息!

原 创作者 | Tscom、王二狗 大爆料!OpenAI被实锤正在研发GPT-5! 还是OpenAI的CEO Sam Altman 亲口证实的。 今日,奥特曼接受《金融时报》的采访,透露了很多OpenAI的下一步计划,二狗帮大家整理成以下10个要点&#x…

搬家快递服务预约小程序的作用是什么

无论家庭还是企业办公,不少人都有搬家快递服务需求,尤其是近些年类似服务市场需求规模增长迅速。而在实际经营中,行业商家从业者也面临一些经营难题: 搬家公司的服务一般主要针对同省用户,同城需求较高,然…

实现定时巡检接口,测试不通过时自动发邮件

背景是这样的:最近组织架构调整,我们这个团队部分人员调入到了另外的业务组,因此她之前负责的业务需要交接给我们。 其中一个是接口每日监测,之前这个同事的做法是每天去手动点下按钮来跑接口测试,然后看一眼接口测试…

GZ038 物联网应用开发赛题第7套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第7套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考评…

YOLOv8任务

介绍 YOLOv8是一个支持多个计算机视觉任务的人工智能框架。该框架可用于执行检测、分割、分类和姿态估计。每个任务都有不同的目标和用例。 检测 检测是YOLOv8支持的主要任务。它包括检测图像或视频帧中的对象,并在它们周围绘制边界框。检测到的对象根据其特征被分类…

全网火爆,Python接口自动化测试Mock服务详细总结(实战场景)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Mock实现原理与…

SparkSQL声明式

简单案例 import org.apache.spark.sql.SparkSession import org.junit.Testcase class Person(id:Int,name:String,sex:String,age:Int) class DataSetCreate {val spark SparkSession.builder().appName("test").master("local[4]").getOrCreate()impo…

2023年【汽车驾驶员(中级)】免费试题及汽车驾驶员(中级)考试试卷

题库来源:安全生产模拟考试一点通公众号小程序 2023年【汽车驾驶员(中级)】免费试题及汽车驾驶员(中级)考试试卷,包含汽车驾驶员(中级)免费试题答案和解析及汽车驾驶员(…

人工智能基础_机器学习029_Lasso回归的使用_代码实现_稀疏性提现---人工智能工作笔记0069

然后我们再来看lasso回归,其实也是前面我们说的套索回归,我们说了 套索回归,具有稀松性,就是有一部分w会变成0对吧 我们先看一下套索回归的公式 公式我们可以去官网去看 可以看到这里上面有个写法是L1 = ||w||1这里两个竖,就是矩阵的写法,表示矩阵,然后 后面的部分|wi|绝对…

c++ 经典服务器开源项目Tinywebserver如何运行

第一次直接按作者的指示,运行sh ./build.sh,再运行./server,发现不起作用,localhost:9006也是拒绝访问的状态,后来摸索成功了发现,运行./server之后,应该是启动状态,就是不会退出,而…

【广州华锐互动】消防科普VR实训展馆增强群众学习兴趣和沉浸感

在现代社会,科技的发展已经深入到我们生活的各个角落,其中包括教育和信息传播领域。3D技术的引入为科普教育提供了全新的可能性。特别是在消防安全教育中,消防科普VR实训展馆的应用,不仅可以提高公众的消防安全意识,还…

分享一下微信公众号怎么增加分销的功能

在当今的数字化时代,微信公众号已成为企业和个人开展营销活动的重要平台。然而,仅仅依靠发布文章和推送消息,已经不能满足商家对深度营销的需求。为了进一步拓展商业价值,微信公众号需要增加分销功能。本文将详细介绍如何为微信公…

ARM PMU

PMU单元概览 ARM PMU概要 PMU作为一个扩展功能,是一种非侵入式的调试组件。 对PMU寄存器的访问可以通过CP15协处理器指令和Memory-Mapped地址。 基于PMUv2架构,A7处理器在运行时可以收集关于处理器和内存的各种统计信息。对于处理器来说这些统计信息中…

Moto edge s pro手机 WIFI和蓝牙连接不上 解决方法分享

2021年12月入手一台Moto Edge S Pro 12256版,看着性价比很高,越用越垃圾。屏幕显示没有vivo亮丽/APP图标很丑/屏幕上一点点水就失灵/拍照片边缘是模糊的/系统几乎不更新。 以上都可以忍受,但是: 用一年不到,蓝牙不能…

【数据结构】深入了解栈

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、栈的基本概念二、栈实现方法的分析与选择2.1 引入2.2 顺序表实现2.3 链表实现2.3.1…

全国犯罪人数大数据可视化平台【可视化项目案例-08】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本文选自专栏:可视化技术专栏100例 可视化技术专栏100例,包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不…

将铜互连扩展到2nm的研究

晶体管尺寸在3nm时达到临界点,纳米片FET可能会取代finFET来满足性能、功耗、面积和成本目标。同样,正在评估2nm铜互连的重大架构变化,此举将重新配置向晶体管传输电力的方式。 芯片制造商也可能会在2nm节点开始用钌或钼在一定程度上取代铜。…

网上第一批购买大王卡的用户都怎么样了?

近日,小编看到有网友在网上发帖询问,网上第一批购买大王卡的用户都怎么样了?一时间得到纷纷得到回应。 小编也汇总了一些回复,大家可以看一看: 因为大王卡是一张定向流量卡,所以在使用时很多软件都是需要额…