- 浏览: 829729 次
- 性别:
- 来自: 北京、四川
文章分类
最新评论
-
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 636转:http://www.cnblogs.com/dolp ... -
Java内存模型
2015-07-29 13:55 9141. 概述 多任务和 ... -
自定义classloader
2015-07-29 13:54 689转:http://tiantian911.iteye.com ... -
自定义ClassLoader实现java应用核心逻辑模块热部署
2015-07-29 13:51 1022转:http://blog.csdn.net/zhangda ... -
java classloader原理初探
2015-07-29 10:14 668转:http://www.cnblogs.com/ ... -
Java 内存分配全面浅析
2015-07-29 08:52 608转:http://blog.csdn.net/shimi ... -
http stream
2014-07-29 16:38 1142StringBuilder sb = new String ... -
Tomcat远程调试
2011-04-09 12:33 1060需要在Tomcat中的catalina.bat中添加如下的一行 ... -
用jmx监控多台服务器(tomcat)
2010-09-08 18:25 4576因为需要写一个后台监控服务器的程序,涉及到jmx,也涉 ... -
call cmd /c start 一点疑问
2010-09-01 10:16 2249call "cmd /c start aaa.bat ... -
Windows计划任务之schtasks
2010-08-30 13:21 3595创建:SCHTASKS /Create /RU SYSTEM ... -
ajax返回值中有中文存在的乱码现象
2010-08-27 16:28 1446ajax返回值中有中文存在的乱码现象,解决就加入下面一行代码即 ... -
MIME TYPE
2010-08-26 16:23 7258最近要做需要在页面上放音频的东西,因此需要用到mime typ ... -
JMX问题
2010-08-20 17:20 5505这个问题貌似是启动tomcat之后就获取不到jmx的链接了,不 ... -
Eclipse控制台乱码
2010-08-05 15:18 4893安装了Eclipse,在运行tomcat时,控制台的中文显示乱 ... -
JMX服务端和客户端的代码
2010-07-27 15:37 3573服务端代码如下 package com.rmi; i ... -
JMX连接Tomcat的JMX测试类
2010-07-27 15:33 3297首先是为了使tomcat支持JMX,必须在tomcat的启动项 ... -
JMX的一个链接类
2010-07-27 09:37 1462package com.pachira.oamp.jmxS ... -
java中文转unicode码
2010-07-22 11:04 43406转载地址:http://www.iteye.com/topic ... -
获取POST数据的值
2010-07-21 14:17 9923当method为POST,Content-Type为 ...
相关推荐
在标题和描述中提到的“java反射例子,封装了一个反射帮助类”,这表明我们有一个实用工具类,可以帮助简化使用反射的复杂过程。 首先,让我们理解Java反射的基本概念。当我们的程序运行时,我们可以通过Class类来...
java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;
首先,从标题“java反射例子”来看,这部分内容将围绕Java反射技术的具体应用展开。Java反射API提供的主要类包括java.lang.Class、java.lang.reflect.Constructor、java.lang.reflect.Method和java.lang.reflect....
JAVA反射机制及应用例子.。。Reflection API
考虑到这是一个简单的反射例子,`ReflectTest.java`可能包含以下内容: ```java public class ReflectTest { public String echo(String msg) { return "Echo: " + msg; } public static void main(String[] ...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和Field...
以下是对标题和描述中提及的Java反射知识点的详细解释: 1. **获取对象的属性**: 在Java中,通过反射可以获取对象的属性。在示例代码中,`getProperty`方法展示了如何做到这一点。首先,通过`owner.getClass()`...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。...通过分析这些例子,你可以更深入地理解Java反射的使用方式及其在实际开发中的应用。
Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java 8中,虽然没有引入重大的反射新特性,但原有的反射API仍然提供了丰富的功能,使得开发者...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Spring框架中,反射扮演着核心角色,...希望这个简单的反射例子能帮助你更好地理解和运用Java反射。
### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至修改自身的状态和行为。这种能力一经提出,迅速成为了计算机科学领域的研究...
Java反射是Java编程语言中的一个强大特性,它允许运行时检查类、接口、字段和方法的信息,甚至可以动态地创建对象并调用其方法。在Java中,`java.lang.reflect`包提供了对反射的支持,包括`Class`、`Constructor`、`...
"java反射机制详解" Java 反射机制是 Java 语言中的一种功能,它允许程序员在运行时检查和修改一个类的结构和行为。 Java 反射机制提供了一种获取类的信息、创建对象、调用方法和获取字段值的方式。 在 Java 中,...
Java反射和泛型是Java编程中的两个重要特性,它们各自为开发者提供了强大的功能,并且在特定情况下可以相互结合使用。本文将深入探讨这两个概念,并通过一个具体的`Testrefl.java`示例来阐述它们的应用。 Java反射...
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...
### Java反射机制简介 Java反射机制是Java编程语言的一个强大特性,它允许程序在运行时检查自身,并且能够“看”到类的信息(字段、方法等),甚至可以在运行时调用这些方法或修改这些字段的值。这为开发带来了很大...
标题“java反射小例子”暗示这是一个关于如何在实际项目中应用反射的小型示例。通常,这样的示例会展示如何使用反射来实现以下功能: 1. **获取类信息**:通过`Class.forName()`方法,我们可以根据类名动态加载类...
代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...
Java 反射概念及例子 Java 反射机制是一种让框架能够根据 "以字符串形式存在的信息" 来调用对象的属性和函数的技术。这种技术在框架编程中特别有用,因为框架编程中很多类是要根据配置文件来配置确定的,没办法预先...