Java反射(五)-Java 方法反射的基本操作
2017-08-20 00:53
495 查看
如何获取某个方法。方法的名称和方法的参数列表才能唯一决定某个方法
方法反射的操作。method.invoke(对象,参数列表)
方法反射的操作。method.invoke(对象,参数列表)
package com.imooc.reflect; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * Created by Administrator on 2017/8/20 0020. */ public class MethodDemo { public static void main(String[] args) { //要获取print(int,int)方法 1. 要获取一个方法就是要获取类的信息,获取类的信息首先要获取类的类类型 A a = new A(); Class class1 = a.getClass(); /* 2.获取方法 名称和参数列表来决定 getMethod获取的是public的方法 getDeclaredMethod获取的是自己声明的方法 */ try { // Method method1 = class1.getDeclaredMethod("print",new Class[]{int.class,int.class}); Method m = class1.getDeclaredMethod("print",int.class,int.class); //方法的反射操作 //a.print(10,20);方法的反射操作是用m对象来进行方法调用 和a.print调用效果是一样的 //用print的方法对象m来操作a //如果方法有具体的返回值,o就得到返回类型,方法如果没有返回值,返回null // Object o = m.invoke(a,new Object[]{10,20}); Object o = m.invoke(a,10,20); System.out.println("======================================"); Method m1 = class1.getMethod("print",String.class,String.class); o = m1.invoke(a,"hello","world"); System.out.println("======================================"); Method m2 = class1.getMethod("print"); // class1.getMethod("print",new Class[]{}); o = m2.invoke(a,new Object[]{}); // o = m2.invoke(a); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } class A { public void print() { System.out.println("helloworld".toUpperCase()); } public void print(int a,int b) { System.out.println(a+b); } public void print(String a,String b) { System.out.println(a.toUpperCase()+"," + b.toLowerCase()); } }
例子,打印出当前对象的所有属性名和属性的值
/** * toString方法,返回属性名称及值 * @return 属性名称及值,格式:[name]张三 [sex]男 */ public String toString(){ StringBuffer result = new StringBuffer(); try { //获取 泛型为Object以及Object的所有子类 类的类类型 Class<? extends Object> clazz = this.getClass(); //获取当前类类自己声明的成员变量 Field [] fields = clazz.getDeclaredFields(); for (Field field : fields) { //获取成员变量的名称 String fieldName = field.getName(); //如果得到的是序列化,跳过。 if ("serialVersionUID".equals(fieldName)) { continue; } //拼接方法名:"get"+方法名 得到如:getId 形式的字符串 String methodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1, fieldName.length()); Method method; //Method类,方法对象。一个成员方法就是一个Method对象 Object resultObj; method = clazz.getMethod(methodName); //得到方法名为methodName的方法对象 resultObj = method.invoke(this); //方法反射,得到属性的值 if (resultObj != null && !"".equals(resultObj)) { //如果属性值不为空,则按规则拼接 属性名 和 属性的值 result.append("[").append(fieldName).append("]").append(resultObj).append(" "); } } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return result.toString(); //将StringBuffer转换成String }
相关文章推荐
- java反射--方法反射的基本操作
- Java学习提要——方法"反射"基本操作与"绕过泛型"实验
- Java--Reflect(反射)专题5——方法反射的基本操作
- Java--反射(四)方法反射的基本操作
- Java反射之——方法反射的基本操作
- Java 反射:Class类,动态加载类获取方法和成员变量构造信息,方法反射的基本操作,集合泛型的本质
- Java方法反射的基本操作
- java反射:java方法反射的基本操作
- java反射之方法反射的基本操作
- Java 方法反射的基本操作
- java中方法反射的基本操作
- Java反射方法反射的基本操作
- 23、Java入门—反射之方法反射的基本操作
- JAVA学习--反射方法操作
- Java 程序优化:字符串操作、基本运算方法等优化策略
- Java 程序优化:字符串操作、基本运算方法等优化策略
- Java 程序优化:字符串操作、基本运算方法等优化策略(一)
- Java 程序优化:字符串操作、基本运算方法等优化策略
- Java -- 利用反射 操作任意数组,包括对象数组 和 基本数据类型的数组
- Java 反射调用带基本数据类型参数的方法