- 浏览: 309896 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (177)
- java基础空间 (12)
- java实例空间 (5)
- oracle积累空间 (22)
- JavaScript积累空间 (16)
- Spring基础空间 (10)
- Struts基础空间 (7)
- Hibernate基础空间 (2)
- java (10)
- EXT积累空间 (10)
- 电脑技术 (10)
- Flex技术点 (2)
- 金融业务 (3)
- DWR积累空间 (1)
- 常用工具记录 (7)
- 生活休闲 (25)
- web服务器 (6)
- java 报表工具 (6)
- SpringSide (1)
- 脑筋转弯 (2)
- java 错误聚集 (1)
- SqlServer集合 (6)
- DB2积累空间 (1)
- MySql记录集 (1)
- Log4j 日志使用 (1)
- 面试聚集 (2)
- jsp记录 (2)
- 原理类 (3)
- Excel VBA (1)
- ECMAScript6 (0)
最新评论
-
challengencu:
...
web服务器、应用服务器、http服务器区别 -
iris_1992:
开源报表写代码不烦吗。。。感脚现在国内报表还是帆软主导。。。
java pojo实体类做birt报表数据源 -
ab0809:
写得很好!!!!赞!
web服务器、应用服务器、http服务器区别 -
liuhu7383:
...
JavaScript动态添加Input组件 -
lovertc:
http://archive.eclipse.org/birt ...
BIRT 百灵 java web项目简单示例
public class ReflectDemo { public static void main(String[] args) throws ClassNotFoundException, SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException { Class claz = Class.forName("com.yss.test.reflect.Demo");// 载入指定的类 or // Demo.class; /** * 获取该类及继承类中的方法 */ Method[] methods = claz.getMethods();// 包括继承而来的所有的public方法名 for (int index = 0; index < methods.length; index++) { // 获取该方法的名字 System.out.println(methods[index].getName()); // 获取该方法的所有参数类型 Class[] pvec = methods[index].getParameterTypes(); for (int i = 0; i < pvec.length; i++) { System.out.println(pvec[i]); } // 获取该方法的所有异常类型 Class[] exce = methods[index].getExceptionTypes(); // 该方法的返回值类型 System.out.println(methods[index].getReturnType()); // 判断该方法定义在那个类中 System.out.println(methods[index].getDeclaringClass()); } Field[] fields = claz.getFields();// 包括继承而来的所有public方法名 for (int index = 0; index < fields.length; index++) { System.out.println(fields[index].getType() + " " + fields[index].getName()); } System.out.println("-------------------------"); /** * 获取当前类中的属性和方法 */ Method[] methodss = claz.getDeclaredMethods();// 只在该类中定义的(不包含继承而来的)共有\ // 私有的方法名 for (int index = 0; index < methodss.length; index++) { System.out.println(methodss[index].getName()); } Field[] fieldss = claz.getDeclaredFields();// 只有该类下定义的(不包含继承来的)共有、私有的属性名 for (int index = 0; index < fieldss.length; index++) { System.out.println(fieldss[index].getType() + " " + fieldss[index].getName()); /** * 用来描述字段成员的修饰语,如“private int”。这些修饰语自身由整数描述,而且使用 Modifier.toString * 来返回以“官方”顺序排列的字符串描述 (如“static”在“final”之前)。这个程序的输出是: */ System.out .println(Modifier.toString(fieldss[index].getModifiers())); } /** * 判断new的对象是否是claz的实例 */ boolean ifflag = claz.isInstance(new Demo()); boolean ifflags = claz.isInstance(new SDemo()); System.out.println(ifflag + " " + ifflags);// true 和 false /** * 获取当前方法的构造函数 */ Constructor[] cons = claz.getDeclaredConstructors(); for (int con = 0; con < cons.length; con++) { System.out.println("获取构造方法: " + cons[con].getName()); } test_method_invoke(claz); invoke_constructor(claz); change_fields(claz); create_array(); create_complex_arr(); } /** * @param claz * @throws SecurityException * @throws NoSuchMethodException * @throws IllegalArgumentException * @throws IllegalAccessException * @throws InvocationTargetException * @throws InstantiationException * * 利用反射 根据方法的名称来执行方法 */ public static void test_method_invoke(Class claz) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException { Class[] params = new Class[2];// 设置参数类型 params[0] = int.class; params[1] = Integer.TYPE; Object demo = claz.newInstance(); Object[] cp = new Object[2];// 具体参数 cp[0] = new Integer(11); cp[1] = new Integer(3); Method params_method = claz.getMethod("share", params);// 获取有参share方法 Method no_params_method = claz.getMethod("share");// 获取无参share方法 Object obj = params_method.invoke(demo, cp); no_params_method.invoke(demo); Integer intg = (Integer) obj; System.out.println("返回值: " + intg.intValue()); } /** * 调用constructor的实例 * * @param claz * @throws IllegalAccessException * @throws InstantiationException * @throws InvocationTargetException * @throws IllegalArgumentException * @throws NoSuchMethodException * @throws SecurityException */ public static void invoke_constructor(Class claz) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, NoSuchMethodException { Class[] params = new Class[4];// 设置参数类型 params[0] = int.class; params[1] = Long.TYPE; params[2] = String.class; params[3] = Double.TYPE; Object demo = claz.newInstance(); Object[] cp = new Object[4];// 具体参数 cp[0] = new Integer(11); cp[1] = new Long(20); cp[2] = new String("青龙"); cp[3] = new Double(29); Constructor constructors = claz.getConstructor(params);// 获取有参构造方法 Object obj = constructors.newInstance(cp); } public static void change_fields(Class claz) throws SecurityException, NoSuchFieldException, InstantiationException, IllegalAccessException { Field field = claz.getField("sname"); Object obj = claz.newInstance(); System.out.println("设置前:" + ((Demo) obj).getSname()); field.set(obj, "qinglong"); System.out.println("设置后:" + ((Demo) obj).getSname()); } /** * 数组在 Java 语言中是一种特殊的类类型,一个数组的引用可以赋给 Object 引用 * * 创建了 n个单位长度的 String 数组,为第 n个位置的字符串赋了值 * * @throws ClassNotFoundException */ public static void create_array() throws ClassNotFoundException { Class claz = Class.forName("java.lang.String"); Object objarr = Array.newInstance(claz, 4); Array.set(objarr, 2, "qing"); System.out.println("创建数组:" + Array.get(objarr, 2)); } /** * 创建了一个 5 x 10 x 15 的整型数组,并为处于 [3][5][10] 的元素赋了值为 * 37。注意,多维数组实际上就是数组的数组,例如,第一个 Array.get 之后,arrobj 是一个 10 x 15 * 的数组。进而取得其中的一个元素,即长度为 15 的数组,并使用 Array.setInt 为它的第 10 个元素赋值。 * 注意创建数组时的类型是动态的,在编译时并不知道其类型。 */ public static void create_complex_arr() { int dims[] = new int[] { 5, 10, 15 }; System.out.println(dims[2]); Object arr = Array.newInstance(Integer.TYPE, dims); Object arrobj = Array.get(arr, 3); Class cls = arrobj.getClass().getComponentType(); System.out.println(cls); arrobj = Array.get(arrobj, 5); Array.setInt(arrobj, 10, 37); int arrcast[][][] = (int[][][]) arr; System.out.println(arrcast[3][5][10]); } } class SDemo { private String aa; public int bb; public String sname; public SDemo() { // System.out.println("父类的构造方法"); } public SDemo(String aa, int bb, String sname) { this.aa = aa; this.bb = bb; this.sname = sname; } public void share() { System.out.println("父类中的方法无参数"); } public void share(int a, int b, int c) { System.out.println("父类中的方法有参数"); } public String getAa() { return aa; } public void setAa(String aa) { this.aa = aa; } public int getBb() { return bb; } public void setBb(int bb) { this.bb = bb; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } } class Demo extends SDemo { public String name; private int age; private double score; private long card; public Demo(int age, long card, String name, double score) { System.out.println("子类有参构造方法。。。。。"); this.age = age; this.card = card; this.name = name; this.score = score; } public Demo() { // System.out.println("子类构造方法"); } public void share() { System.out.println("子类中的方法无参数"); } public int share(int a, int b) { System.out.println("子类中的方法有参数"); return a + b; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public long getCard() { return card; } public void setCard(long card) { this.card = card; } }
参照链接:http://www.iteye.com/topic/602805
发表评论
-
JSP 自定义标签 BodyTagSupport
2011-06-08 17:13 6504引用带body的自定义标签 ... -
xml dtd schema基础
2010-12-10 16:47 1019<?xml version="1.0&qu ... -
日期函数Calendar
2010-10-04 16:05 979引用 获取某年的天数: public static int ... -
native2ascii 转换编码
2010-08-09 18:05 9521、native2ascii简介: native2as ... -
jdk日志框架 logging
2010-07-15 10:52 930引用 介绍: http://developer.51cto.c ... -
Thread生产者消费者例子
2010-03-16 10:31 2511引用 java多线程一般都会讲消费者-生产者模型 生产者与消 ... -
java排序comparable 与 comparator实例
2010-03-15 17:42 6204对于存储在集合里的自定义对象,要想对它们进行排序,我们只需 ... -
HashMap深度剖析
2010-03-15 17:33 858引用 】Java中对HashMap的 ... -
java 多线程
2010-03-15 15:15 846利用Java语言实现多线程应用程序的方法很简单。根 ... -
java 位运算
2010-03-15 13:12 995问题: 大厅里有64盏灯,每盏灯都编了号码,分别为1-64。 ... -
java I/O
2010-03-15 11:27 855/** * @author qinglong * j ...
相关推荐
9.3 Java反射reflect
java反射(reflect)
JAVA REFLECT (java 反射) 取得类的继承结构 - 类所在的包; |- public Package getPackage() - 类的声明方式; |-取得全类名:public String getName() |-只取类名: public String getSimpleName() - 类所继承...
本文章的原代码. 博文链接:https://yidwo.iteye.com/blog/42995
java 反射 reflect 源代码,包括,内部类,类,方法等三种实现。可直接运行
JAVA反射的基础,基础,但也有价值,可以看看了解, 通过反射可以是程序的扩展性增强!
java反射详解,详细说明java反射内部机制,适合初学者。
ava反射机制 概述:通俗地讲Java反射就是通过类名获得类的实例的方法。java.lang.reflect提供了实现Java反射的API。
java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;
万能的反射封装接口,值得下载参考,当成util
java反射机制核心代码,小弟一直弄不明白,怎么通过反射来调用私有成员方法,看了这个后,你可以随心调用private方法,和属性,记得添加setAccessable(true),哦,要不还是不行,如:method.setAccessable(true);
Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法
该资源包含了一个利用反射执行的一些操作,包含了动态执行构造方法,动态运行私有方法,为属性初始化等等,简单易懂。
免费共享,很详细的介绍了反射机制的原理,适合追根究底的java学习者
java反射的一些总结知识点,这是java中反射比较好入门的资料
java反射技术,DaoFactory,通过反射获取接口对象,然后使用接口中的方法。
详细讲解java的reflect包的,阐述反射机制及动态代理的细节问题。其中动态代理部分内容参考网上资料。读完此文,相信会对javaf反射机制有一个完整清楚的了解。尤其应该看看其他中代码举例部分。
Java 反射机制 代码的实例 请认真阅读 运行此代码 只要读懂了 反射机制也就明白了
java reflect Method getDeclaredMethod invoke getConstructor