第42题JAVA高级技术-反射实战2(动态调用类中方法)

Posted 小虚竹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第42题JAVA高级技术-反射实战2(动态调用类中方法)相关的知识,希望对你有一定的参考价值。

文章目录

零、前言

​ 今天是学习 JAVA语言 打卡的第42天,每天我会提供一篇文章供群成员阅读( 不需要订阅付钱 ),读完文章之后,按解题思路,自己再实现一遍。在小虚竹JAVA社区 中对应的 【打卡贴】打卡,今天的任务就算完成了。

​ 因为大家都在一起学习同一篇文章,所以有什么问题都可以在群里问,群里的小伙伴可以迅速地帮到你,一个人可以走得很快,一群人可以走得很远,有一起学习交流的战友,是多么幸运的事情。

​ 学完后,自己写篇学习报告的博客,可以发布到小虚竹JAVA社区 ,供学弟学妹们参考。

​ 我的学习策略很简单,题海策略+ 费曼学习法。如果能把这100题都认认真真自己实现一遍,那意味着 JAVA语言 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。

一、题目描述

题目:在JAVA中,一般调用类的方法有两种方式:一种是静态方法,可以直接用类名调用;另一种是非静态方法,要使用类的对象进行调用。

反射机制提供了第三种调用方式:根据需要指定要调用 的方法,调用的方法连私有方法也是能调用到的。

实现:使用反射机制调用Math类的静态方法sin()和String类的非静态方法equals()。

二、解题思路

定义类:MethodTest

在main方法中调用Math类的静态方法sin()和String类的非静态方法equals()。

使用Method类的相关方法实现

Method类提供类或接口上单独某个方法信息

反映的方法可能是类方法或实例方法,或抽象方法。

使用Method类的invoke()方法可以实现动态调用方法。

三、代码详解

public class MethodTest 
    public static void main(String[] args) 
        try 
            System.out.println("调用Math类的静态方法sin()");
            Method sin = Math.class.getDeclaredMethod("sin", Double.TYPE);
            Double sin1 = (Double) sin.invoke(null, new Integer(1));
            System.out.println("1的正弦值是:" + sin1);
            System.out.println("调用String类的非静态方法equals()");
            Method equals = String.class.getDeclaredMethod("equals", Object.class);
            Boolean mrsoft = (Boolean) equals.invoke(new String("小虚竹"), "小虚竹");
            System.out.println("字符串是否是小虚竹:" + mrsoft);
         catch (Exception e) 
            e.printStackTrace();
        
    

四、推荐专栏

《JAVA从零到壹》

《JAVA从零到壹》第四讲:类与对象基础

第六讲:数组包及访问控制

《JAVA从零到壹》第七讲:面向对象高级特性

五、示例源码下载

关注下面的公众号,回复筑基+题目号

筑基42

以上是关于第42题JAVA高级技术-反射实战2(动态调用类中方法)的主要内容,如果未能解决你的问题,请参考以下文章

第43题JAVA高级技术-反射实战3(动态设置类的私有属性)

Java反射

Redis高级项目实战,java运算符和表达式程序题

Java高级篇——反射

Java高级学习篇之反射

java的反射机制