java 反射 执行方法_通过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");

}

输出如下:

以上

希望对大家有所帮助

//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"); } 输出如下: 以上 希望对大家有所帮助
经验分享 程序员 微信小程序 职场和发展