5-1 Java 方法反射的基本操作
来源:互联网 发布:sftp登录 端口号 编辑:程序博客网 时间:2024/05/29 09:08
- 如何获取某个方法。方法的名称和方法的参数列表才能唯一决定某个方法
- 方法反射的操作。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 }
阅读全文
0 0
- 5-1 Java 方法反射的基本操作
- Java 方法反射的基本操作
- Java方法反射的基本操作
- java反射:java方法反射的基本操作
- Java反射之——方法反射的基本操作
- Java反射机制之方法反射的基本操作
- Java反射机制:方法反射的基本操作
- java反射之方法反射的基本操作
- JAVA反射之方法反射的基本操作
- Java--反射(四)方法反射的基本操作
- Java--Reflect(反射)专题5——方法反射的基本操作
- 【慕课网笔记】Java 反射机制 5 方法反射的基本操作
- 方法反射的基本操作
- Java反射的基本操作
- JAVA反射的基本操作
- Java反射的基本操作
- java反射学习(1):反射的基本操作
- 23、Java入门—反射之方法反射的基本操作
- Spring Boot Session共享2种方式
- 图像处理复习(一):SIFT
- [LintCode]112.删除排序链表中的重复元素
- maven jar包冲突
- 如何自己封装一个ajax函数
- 5-1 Java 方法反射的基本操作
- Android studio NDK demo
- 用谷歌浏览器将英文文档翻译成中文的方法(无字数限制)
- Failed resolution of: Lokhttp3/internal/Platform;
- struts2常量的配置
- C51用宏定义代替printf函数
- 费马猜想
- 域名配置,tomcat通过域名打不开
- MySQL开启远程登录