通过反射机制调用方法

news2024/9/22 17:23:37
package com.javase.reflect;

import com.javase.service.UserService;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ResourceBundle;

/**
 * 通过反射机制调用方法(必须掌握,五颗星*****)
 *
 *    反射机制让代码具有很强的通用性,可变化的内容都可以写到配置文件中,将来修改配置文件之后,创建的对象
 *    就不一样了,调用的方法也不同了,但是这段java代码不需要改变,这就是反射机制的魅力。
 */
public class ReflectMethodText03五颗星 {
    public static void main(String[] args) {
        //不使用反射机制调用方法
        //创建对象
        UserService userService = new UserService();
        //调用方法
        /**
         * 要素分析
         *     要素1:对象userService
         *     要素2:方法名login
         *     要素3:实际参数
         *     要素4:返回值
         */
        boolean loginSuccess = userService.login("admin","123");

        //使用反射机制来调用一个对象的方法
        //通过资源绑定器来读取配置文件(属性配置文件dp.properties在IDEA中的目录结构如下图)
        ResourceBundle bundle = ResourceBundle.getBundle("dp");
        String className = bundle.getString("className");
        String methodName = bundle.getString("methodName");
        String name = bundle.getString("name");
        String password = bundle.getString("password");
        try {
            //获取类
            Class userServiceClass = Class.forName(className);
            //创建对象(该方法会调用com.javase.service.UserService类中的无参数构造方法,必须保证该类中提供了无参构造)
            Object obj = userServiceClass.newInstance();
            //获取Method(下面方法是通过方法名和形参来获取方法)
            Method loginMethod = userServiceClass.getDeclaredMethod(methodName, String.class, String.class);
            //调用方法
            //使用反射机制调用方法也需要4要素,使用反射机制调用方法是反射机制中最最最重要的方法,必须记住
            /**
             * 使用反射机制调用方法也需要4要素:
             *    要素1:对象obj
             *    要素2:方法loginMethod
             *    要素3:实参"admin","123"
             *    要素4:返回值retValue
             */
            Object retValue = loginMethod.invoke(obj,name,password);
            //打印方法调用后的返回值
            System.out.println(retValue);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}
package com.javase.service;

/**
 * 用户业务类
 */
public class UserService {
    /**
     * 用户登录方法
     * @param name 用户名
     * @param password 密码
     * @return true表示登录成功  false表示登录失败
     */
    public boolean login(String name,String password){
        if ("admin".equals(name) && "123".equals(password)){
            return true;
        }
        return false;
    }

    /**
     * 退出系统方法
     */
    public void logout(){
        System.out.println("系统已经安全退出!");
    }
}

                        ​​​​​​​        

                                属性配置文件dp.properties在IDEA中的目录结构

 

                                                         属性配置文件dp.properties

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

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

相关文章

小程序开发经验分享(2)前端开发

一、开发前的准备 开发环境:微信推出的官方开发工具。 申请 Appid :相关公司或个人申请到 Appid 后可以进行真机的调试和预览,否则只能在开发工具里进行调试。 备案域名和证书:微信小程序仅支持 https 协议,所以务必绑定含有证书的域名,才能在正式上线后进行使用。 二…

jumpserver源码包安装

cd /opt wget https://github.com/jumpserver/installer/releases/download/v2.20.1/jumpserver-installer-v2.20.1.tar.gz tar -xf jumpserver-installer-v2.20.1.tar.gz cd jumpserver-installer-v2.20.1 ​ vim config-example.txt 在config-example配置文件里配置mysql&…

nacos 2.2部署指南,并配置mysql数据库

首先进入到/opt cd /opt 1.下载安装包 wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz 2.解压 tar -zxvf nacos-server-2.2.0.tar.gz 3.修改配置 3.1修改为单机部署模式(默认为 vi /opt/nacos/bin/startup.sh 55行,示例: exp…

Cypress 安装及入门排坑指南

最近准备给公司项目做重构,原本是打算使用Jest来作为测试工具的,刚好无意之中接触到了Cypress这款测试工具,虽然用上它非常的不容易(简直是一波三折),但是用上了之后觉得真香啊。我们本篇文章就是讲Cypress…

C进阶_C语言_浮点数存储规则_浮点型在内存中的存储

在开始讲解之前,我们看一下常见浮点数的写法: 3.14159 1E10(它代表1.0乘以10的10次方) 浮点型家族里有float、double、long double类型。 浮点型的表示范围是多少?我们打开float.h就能看到(这里用everythi…

什么牌子的蓝牙耳机好?好用的蓝牙耳机排行

现如今,蓝牙耳机的用途越来越广泛,无论是追剧、游戏、通话、运动等,都能看到使用蓝牙耳机的人。在日常的使用中蓝牙耳机也逐渐取代有线耳机成为受人们欢迎的存在,那么,什么牌子的蓝牙耳机好?接下来&#xf…

功能强大的python包sklearn

1. sklearn简介sklearn是基于python语言的机器学习工具包,是目前做机器学习项目当之无愧的第一工具。 sklearn自带了大量的数据集,可供我们练习各种机器学习算法。 sklearn集成了数据预处理、数据特征选择、数据特征降维、分类\回归\聚类模型、模型评估等…

基于YOLO实践布匹缺陷检测

在缺陷检测领域中,越来越多看到AI的身影,路面缺陷、生产缺陷、PCB缺陷、瓶装酒缺陷检测等等,目标检测等模型发挥着越来越多的作用,像瓷砖缺陷和布匹缺陷这类平面类型的缺陷也不例外,最近做的项目中大多和这类型的数据有…

回顾2022,那些令人印象深刻的AI突破

文 | 付奶茶2022年是令人印象深刻的一年。在这一年中,我们目睹了许多前所未有的AI模型的出现,这些模型不断刷新着人类对AI力量的认知。关于这一年中最好的工作,每个人都有自己不同的看法。在这篇文章中,我们跟随Alan D. Thompson在…

对Mysql 超时配置项进行深入理解!

1 JDDB超时JDBC 是 Java 应用程序中用于访问数据库的一套标准 API类型4驱动是通过socket来处理字节流的。如果socket超时设置不合适,类型4驱动也可能有同样的错误(连接被阻塞)。1.2 JDBC超时层次应用程序WAS与数据库间的超时的层次更上层的超…

STL模拟实现——string

前言 STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架。 STL有六大组件:算法,容器,迭代器,仿函数&am…

从0搭建一个WebRTC,实现多房间多对多通话,并实现屏幕录制

这篇文章开始会实现一个一对一WebRTC和多对多的WebRTC,以及基于屏幕共享的录制。本篇会实现信令和前端部分,信令使用fastity来搭建,前端部分使用Vue3来实现。 为什么要使用WebRTC WebRTC全称Web Real-Time Communication,是一种实…

安全狗重磅发布数据安全解决方案·数垒

一、 势在必行的数据安全 近年来,随着《网络安全法》、《数据安全法》、“数据二十条”等多部法律、意见法规等的相继颁布,数据安全管理与防护在国家政策上成为势在必行的行动之一。与此同时,伴随着数字经济时代的到来,数以万计…

Java基础语法-学习笔记

目录 01Java语言的发展 02Java的三大平台 03Java的主要特性 04JRE和JDK 1. 注释 使用的技巧 注意点 2. 关键字 2.1 概念 2.2 第一个关键字class 3. 字面量 区分技巧 4. 变量 4.1 什么是变量? 4.2 变量的定义格式 5. 数据类型 5.1 Java语言数据类型的…

STM32——TIM输出比较

文章目录一、TIM输出比较输出比较简介PWM简介输出比较通道(高级)输出比较通道(通用)输出比较模式控制器工作原理PWM基本结构参数计算三、PWM驱动LED呼吸灯电路设计关键代码关键函数与参数引脚重映射取消默认调试功能函数极性选择决定占空比,周期的三个函数四、PWM驱…

Design pattern-js的设计模式(一)

前言 什么是设计模式?(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间…

【youcans 的 OpenCV 例程 300篇】254.OpenCV 绘制图像标记

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】254. OpenCV 绘制标记 7.1 绘图函数基本参数 OpenCV提供了绘图功能,可以在图像上绘制直线、矩形、圆、椭圆等各种几何图形。 函数 cv.line()、cv.rectangle()、cv.circle()、cv.polyli…

深度学习:08 训练、测试和验证集的说明

目录 用于深度学习的数据集 训练集 验证集 测试集 总结 用于深度学习的数据集 接下来,我将在这篇里面讨论在训练和测试神经网络期间使用的不同数据集。 出于模型的训练和测试目的,我们应该将数据分解为三个不同的数据集。这些数据集将包含以下内容…

【小f的刷题笔记】(JS)阶乘 - 阶乘后的零 LeetCode172 阶乘函数后K个零 LeetCode793

【阶乘】 一、阶乘后的零: LeetCode172 链接: 172.阶乘后的零 题目: 思路: 0的产生是一定是因为2*5产生的,所以就是找因数 并且,可想而知,找的到因数5,必然找的到因数2与之搭配…

【MySQL】深入理解B+树索引

文章目录1. 前言2. 索引方案3. InnoDB的索引方案4. 索引的分类4.1 聚簇索引4.2 二级索引4.3 联合索引5. InnoDB中的B树索引的注意事项5.1 内节点中目录项记录的唯一主5.2 一个页至少容纳2条记录6. MyISAM中的索引⽅案简单介绍1. 前言 索引,是MySQL快速查询的秘籍。…