- 浏览: 821745 次
- 性别:
- 来自: 北京、四川
文章分类
最新评论
-
sunbeamzheng:
总结的很好,好好看看。 拷贝问题确实很需要注意,特别是影不影响 ...
java深拷贝与浅拷贝 -
xmh8023:
...
获取POST数据的值 -
xmh8023:
我访问别的服务器怎么办?急求
获取POST数据的值 -
xmh8023:
String urlString="http://l ...
获取POST数据的值 -
lv12312:
Tomcat 7的老版本么?有bug的,https://iss ...
JMX问题
Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。
个人理解就是在运行时可以得到某个对象的所有信息,包括方法,类型,属性,方法参数,方法返回值以及可以调用该类的所有方法。
下面是两个例子:
个人理解就是在运行时可以得到某个对象的所有信息,包括方法,类型,属性,方法参数,方法返回值以及可以调用该类的所有方法。
下面是两个例子:
package cn.test; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Java Reflection Cookbook * * @author Michael Lee * @since 2006-8-23 * @version 0.1a */ public class TestReflection { /** * 得到某个对象的公共属性 * * @param owner, fieldName * @return 该属性对象 * @throws Exception * */ public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner.getClass(); Field field = ownerClass.getField(fieldName); Object property = field.get(owner); return property; } /** * 得到某类的静态公共属性 * * @param className 类名 * @param fieldName 属性名 * @return 该属性对象 * @throws Exception */ public Object getStaticProperty(String className, String fieldName) throws Exception { Class ownerClass = Class.forName(className); Field field = ownerClass.getField(fieldName); Object property = field.get(ownerClass); return property; } /** * 执行某对象方法 * * @param owner * 对象 * @param methodName * 方法名 * @param args * 参数 * @return 方法返回值 * @throws Exception */ public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception { Class ownerClass = owner.getClass(); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(methodName, argsClass); return method.invoke(owner, args); } /** * 执行某类的静态方法 * * @param className * 类名 * @param methodName * 方法名 * @param args * 参数数组 * @return 执行方法返回的结果 * @throws Exception */ public Object invokeStaticMethod(String className, String methodName, Object[] args) throws Exception { Class ownerClass = Class.forName(className); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(methodName, argsClass); return method.invoke(null, args); } /** * 新建实例 * * @param className * 类名 * @param args * 构造函数的参数 * @return 新建的实例 * @throws Exception */ public Object newInstance(String className, Object[] args) throws Exception { Class newoneClass = Class.forName(className); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Constructor cons = newoneClass.getConstructor(argsClass); return cons.newInstance(args); } /** * 是不是某个类的实例 * @param obj 实例 * @param cls 类 * @return 如果 obj 是此类的实例,则返回 true */ public boolean isInstance(Object obj, Class cls) { return cls.isInstance(obj); } /** * 得到数组中的某个元素 * @param array 数组 * @param index 索引 * @return 返回指定数组对象中索引组件的值 */ public Object getByArray(Object array, int index) { return Array.get(array,index); } }
package cn.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import cn.IpUtils.IpBean; public class TestObject { /** * 设置属性值 * @param list * @param cla * @return */ public ArrayList array2bean(ArrayList list, Class cla) { ArrayList result = new ArrayList(); int filed_len = cla.getDeclaredFields().length; System.out.println(":"+cla.getDeclaredFields().length); for (int i = 0; i < list.size(); i++) { Object[] o = (Object[]) list.get(i); int length = filed_len < o.length ? filed_len : o.length; try { result.add(cla.newInstance()); for (int j = 0; j < length; j++) { Method m = null; String mName =cla.getDeclaredFields()[j].getName(); mName = mName.substring(0, 1).toUpperCase()+ mName.substring(1); mName = "set" + mName; m = cla.getMethod(mName, new Class[] { String.class }); //调用设置的方法,给属性赋值 m.invoke(result.get(i), new Object[] { o[j] == null ? "": o[j].toString() }); } } catch (Exception e) { e.printStackTrace(); } } return result; } /** * 获取get的取值 * @param obj * @return * @throws Exception */ public String getObjectToString(Object obj) throws Exception{ Class cla=obj.getClass(); Method[] ma=cla.getDeclaredMethods();//获取所有声明的方法数组 Method method=null; String methodName=null; Object returnValue=null; for(int i=0;i<ma.length;i++){ method=ma[i]; methodName=method.getName();//方法名 if(methodName.indexOf("get")==0){//以get开始的方法,排除set方法 returnValue=method.invoke(obj, null);//调用方法,相当于执行get方法得到的结果,这里返回的是一个对象 System.out.print(methodName+"::"); System.out.println(returnValue==null?"":returnValue.toString()); } } return ""; } /** * 获取对象的属性值,含有get方法的 * @param obj * @return * @throws NoSuchMethodException * @throws SecurityException * @throws InvocationTargetException * @throws IllegalAccessException * @throws IllegalArgumentException */ public String getAttributeValue(Object obj) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{ Class cla=obj.getClass(); Field[] fds=cla.getDeclaredFields(); Field field=null; String fieldName=null; String methodName=null; Method method=null; Object returnValue=null; for(int i=0;i<fds.length;i++){ field=fds[i]; fieldName=field.getName(); methodName="get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1); method=cla.getDeclaredMethod(methodName, null); returnValue=method.invoke(obj, null);//调用方法,相当于执行get方法得到的结果,这里返回的是一个对象 System.out.print(methodName+"::"); System.out.println(returnValue==null?"":returnValue.toString()); } return ""; } /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // IpBean.class TestObject to=new TestObject(); IpBean ib=new IpBean(); ib.setFrom("from1"); ib.setPosition("position1"); ib.setTo("to1"); ib.setId(10); to.getObjectToString(ib); // to.getAttributeValue(ib); } }
package cn.IpUtils; public class IpBean { private String from; // IP段起始 private String to; // IP结束 private String position; // 地理名称 private int id = 0; public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getTo() { return to; } public void setTo(String to) { this.to = to; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
发表评论
-
Java并发编程:volatile关键字解析
2015-07-30 11:30 593转:http://www.cnblogs.com/dolp ... -
Java内存模型
2015-07-29 13:55 8771. 概述 多任务和 ... -
自定义classloader
2015-07-29 13:54 641转:http://tiantian911.iteye.com ... -
自定义ClassLoader实现java应用核心逻辑模块热部署
2015-07-29 13:51 965转:http://blog.csdn.net/zhangda ... -
java classloader原理初探
2015-07-29 10:14 629转:http://www.cnblogs.com/ ... -
Java 内存分配全面浅析
2015-07-29 08:52 574转:http://blog.csdn.net/shimi ... -
http stream
2014-07-29 16:38 1076StringBuilder sb = new String ... -
Tomcat远程调试
2011-04-09 12:33 1037需要在Tomcat中的catalina.bat中添加如下的一行 ... -
用jmx监控多台服务器(tomcat)
2010-09-08 18:25 4536因为需要写一个后台监控服务器的程序,涉及到jmx,也涉 ... -
call cmd /c start 一点疑问
2010-09-01 10:16 2215call "cmd /c start aaa.bat ... -
Windows计划任务之schtasks
2010-08-30 13:21 3545创建:SCHTASKS /Create /RU SYSTEM ... -
ajax返回值中有中文存在的乱码现象
2010-08-27 16:28 1411ajax返回值中有中文存在的乱码现象,解决就加入下面一行代码即 ... -
MIME TYPE
2010-08-26 16:23 7216最近要做需要在页面上放音频的东西,因此需要用到mime typ ... -
JMX问题
2010-08-20 17:20 5464这个问题貌似是启动tomcat之后就获取不到jmx的链接了,不 ... -
Eclipse控制台乱码
2010-08-05 15:18 4855安装了Eclipse,在运行tomcat时,控制台的中文显示乱 ... -
JMX服务端和客户端的代码
2010-07-27 15:37 3518服务端代码如下 package com.rmi; i ... -
JMX连接Tomcat的JMX测试类
2010-07-27 15:33 3264首先是为了使tomcat支持JMX,必须在tomcat的启动项 ... -
JMX的一个链接类
2010-07-27 09:37 1427package com.pachira.oamp.jmxS ... -
java中文转unicode码
2010-07-22 11:04 43322转载地址:http://www.iteye.com/topic ... -
获取POST数据的值
2010-07-21 14:17 9870当method为POST,Content-Type为 ...
相关推荐
java反射例子,封装了一个反射帮助类,解压,加载到myeclipse上可用;java反射例子,封装了一个反射帮助类,解压,加载到myeclipse上可用;
java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;
java反射例子.doc 是个小例子.主要是讲反射机制,是java的重要部分.
JAVA反射机制及应用例子.。。Reflection API
Java反射简单例子,给刚刚学习反射的人用...
java学习例子 java java例子 java反射
Java反射案例,可以参考: Java反射机制 - 相关API:https://blog.csdn.net/niuba123456/article/details/85951088
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。
Java 8个反射实例 项目实例 项目工程
import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; import com.org.entity.User; /** */ public class Test3 { /** * @param args */ public static void main(String[] args) ...
java反射例子
讲解了JAVA中反射机制,包含例子,代码!对初学者很有用
重新学习Spring相关书籍时,看到一些反射的代码例子;分享一下
java反射机制例子
java反射详解,详细说明java反射内部机制,适合初学者。
一个例子8个demo让你了解Java反射机制
Java反射实例,可以给初学反射的同志们一定帮助。一个简单实例,可以更好的理解反射的规矩。
代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...
java reflect Method getDeclaredMethod invoke getConstructor
java 反射使用的整理和委托实现接口反射的例子