- 浏览: 314574 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 6540引用带body的自定义标签 ... -
xml dtd schema基础
2010-12-10 16:47 1043<?xml version="1.0&qu ... -
日期函数Calendar
2010-10-04 16:05 1005引用 获取某年的天数: public static int ... -
native2ascii 转换编码
2010-08-09 18:05 9741、native2ascii简介: native2as ... -
jdk日志框架 logging
2010-07-15 10:52 949引用 介绍: http://developer.51cto.c ... -
Thread生产者消费者例子
2010-03-16 10:31 2533引用 java多线程一般都会讲消费者-生产者模型 生产者与消 ... -
java排序comparable 与 comparator实例
2010-03-15 17:42 6235对于存储在集合里的自定义对象,要想对它们进行排序,我们只需 ... -
HashMap深度剖析
2010-03-15 17:33 875引用 】Java中对HashMap的 ... -
java 多线程
2010-03-15 15:15 877利用Java语言实现多线程应用程序的方法很简单。根 ... -
java 位运算
2010-03-15 13:12 1027问题: 大厅里有64盏灯,每盏灯都编了号码,分别为1-64。 ... -
java I/O
2010-03-15 11:27 876/** * @author qinglong * j ...
相关推荐
Java反射机制是Java编程语言中一个强大的特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具备了高度的灵活性,能够在运行时动态地获取类的信息并调用对象的方法。Java...
以下我们将深入探讨Java反射的基本概念、主要API以及如何通过给定的代码示例来理解反射的应用。 首先,让我们了解什么是类的反射。在Java中,`java.lang.Class` 类代表了运行时的类信息。我们可以通过一个类的全名...
JAVA REFLECT (java 反射) 取得类的继承结构 - 类所在的包; |- public Package getPackage() - 类的声明方式; |-取得全类名:public String getName() |-只取类名: public String getSimpleName() - 类所继承...
Java反射(Reflect)是Java语言中的一个重要特性,它允许运行时的Java程序访问、操作类、接口、字段和方法的信息,甚至动态调用方法。在Java编程中,反射提供了强大的能力,可以用来实现一些高级功能,如元编程、...
- [Oracle官方文档](https://docs.oracle.com/javase/tutorial/reflect/):提供关于Java反射机制的详细解释和示例。 - [Effective Java](https://www.amazon.com/Effective-Java-3rd-Edition/dp/0134685997):由...
Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Field`:表示类的字段。 -...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个资源“java反射调用实例代码”提供了关于如何使用Java反射API进行各种...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
Java中的反射机制是Java语言提供的一种强大的工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的...通过理解并熟练掌握Java反射机制,开发者可以更好地利用Java的动态性,提高代码的可扩展性和维护性。
### Java反射机制总结 #### 反射的概念与起源 反射的概念最早由Smith于1982年提出,指的是程序能够访问、检测并修改其自身状态或行为的能力。这一概念的提出迅速引起了计算机科学领域的广泛关注,并在之后的研究中...
Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...
Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活...在提供的压缩包文件"JavaReflect"中,可能包含了关于Java反射和动态代理的示例代码和教程,通过学习和实践这些内容,你可以更深入地掌握这两种技术。
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。通过反射,我们可以动态地...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有高度的灵活性,尤其在处理框架、插件系统以及元数据驱动...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过反射,我们可以动态地创建对象、访问和修改字段、调用方法,甚至执行私有方法和访问包内可见的元素。...
### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至修改自身的状态和行为。这种能力一经提出,迅速成为了计算机科学领域的研究...