反射第四步 : 通过反射获取某一个类的 方法 并通过反射调用
2017-08-21 11:45
302 查看
package cn.sdut.reflectclass; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Arrays; /* * 反射第四步 : 通过反射获取某一个类的 方法 并通过反射调用 * * 带有 “Declared”的方法 无论什么访问权限的方法都可访问 * 不带有 “Declared”的方法 只可访问public的方法 */ class B{ public void show1(){ System.out.println("show1"); } public void show2(int a){ System.out.println("show2"+a); } private void show3(String[] b){ System.out.println("show3"+Arrays.toString(b)); } public static void show4(){ System.out.println("静态"); } } public class ReflectDemo04 { public static void main(String[] args) throws Exception { //1.获取B的Class对象 Class clz = Class.forName("cn.sdut.reflectclass.B");//换了一种方式,取得B的Class对象 /* * 2.获取所有无论访问权限的方法。 * getDeclaredMethods() 返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。 * getMethods()返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。 */ Method[] m = clz.getDeclaredMethods(); for (Method method : m) { System.out.println(method); } //3.获取一个方法并调用 Constructor<B> cb = clz.getDeclaredConstructor();//通过反射获得默认构造器 访问权限是default 所以用"Declared" B b = cb.newInstance();//创建实例对象 Method m1 = clz.getMethod("show2",int.class);//获得方法 m1.invoke(b,new Object[]{10});//塞进实例和参数 调用方法完成 打印输出:show210 Method m2 = clz.getDeclaredMethod("show3",String[].class);//获得方法 m2.setAccessible(true); m2.invoke(b,new Object[]{new String[]{"1","2","x"}});//塞进实例和参数 调用方法完成 打印输出:show3[1, 2, x] //4: 获取方法的返回值 Class returnType = m1.getReturnType(); System.out.println(returnType); //5:获取方法的修饰符 int modifiers = m2.getModifiers(); Modifier mo = new Modifier(); String str = mo.toString(modifiers); System.out.println(str); //访问静态方法 Method m4 = clz.getMethod("show4",null);//获得方法 m4.invoke(null,new Object[]{});//静态方法 不需要实例对象 第一个参数为null //....还有获取参数的类型,各式各样可以去看API } }
相关文章推荐
- C#通过反射获取上层调用方法信息
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- MyBatis+Spring在注解@Autowried后通过反射的方式调用方法获取注入的Service或DAO对象为空
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- 深入理解 c# 第三章 通过反射来调用和获取泛型方法
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- java通过反射获取调用变量以及方法
- web developer tips (83):通过反射从堆栈里获取调用的方法名称
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
- 通过反射获取及调用方法(Method)
- java 通过反射获取调用类方法及属性
- 一个servlet中通过反射动态调用多个方法
- web developer tips (83):通过反射从堆栈里获取调用的方法名称
- Java反射之通过反射获取一个对象的方法信息
- 通过反射调用一个单列的方法(单列必须有“getInstance”方法)
- java 通过反射获取调用类方法及属性
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- 通过反射获取类属性字段 以及 调用类方法