通过Java反射机制调用方法

//20210204
写在前面:最近再把Java反射和注释知识点过一遍,在这里记一下重要的点,本文讲述反射机制创建对象并调用方法

主要任务:

  • 使用类反射机制实现对象创建以及方法调用
  • 与普通方式实现对象创建以及方法调用,并对比二者区别

程序源代码:

//此处实现String的反射调用,测试方法为equals方法

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class MethodReflection {

    public static void main(String[] args) throws Exception{
        String test = new String("hello world");
        System.out.println(test.equals("hello world"));

        Class st = Class.forName("java.lang.String");
        Constructor con = st.getDeclaredConstructor(String.class);//获取有参构造
        Object obj = con.newInstance("hello world");
        Method[] methods = st.getMethods();
//        for (Method method : methods) {
//            System.out.println(method.getName()+" "+ Modifier.toString(method.getModifiers()));
//        }
        System.out.println(methods[0].getName());

        Object value = methods[0].invoke(obj,"hello world");
        System.out.println(value.toString());
    }

}

  • 输出如下:

  • 对比:

    • 使用普通方法
      • 优点:方便
      • 缺点:不灵活,一旦需求改了就需要改源代码
    • 使用反射机制
      • 优点:灵活,可以把关键内容写进配置文件,java文件只是构造一个模板,需求要改的时候更改配置文件即可
      • 缺点:不方便,程序冗长

附录:

小知识点——关于可变长度参数[...]:

  • Java中,一个方法可以传入不定长度的参数,使用参数类型+‘...’指定即可
  • 例:
//'...'的使用举例

public static void test(String... args){
	for(Stirng str : args){
		System.out.println(str);//输出传入参数列表
	}
}

public static void main(String[] args){
	test("hello","world");
}
  • 输出如下:

以上
希望对大家有所帮助

posted @ 2021-02-04 17:33  醉生梦死_0423  阅读(688)  评论(0编辑  收藏  举报