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

TryAgain- 2022-05-02 14:40:34

目录

  • 一:题目【第42题】JAVA高级技术-反射实战2(动态调用类中方法)
  • 二:题目描述
  • 三:解题思路
  • 四:代码实现
  • 五:结果截图

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

二:题目描述

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

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

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

三:解题思路

定义类:MethodTest

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

使用Method类的相关方法实现

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

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

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

四:代码实现

package com.basic;

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

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 (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

五:结果截图

image-20220502143957445

...全文
57 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

134,680

社区成员

发帖
与我相关
我的任务
社区描述
越努力越幸运,一个人努力可以走得很快,一群人努力,可以走得很远,准备好一起成为架构师了嘛!
AIGC后端 个人社区
社区管理员
  • 小虚竹
  • 阿莫 夕林
  • java李杨勇
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧