134,680
社区成员
发帖
与我相关
我的任务
分享题目:在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();
}
}
}