- 浏览: 142117 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
三九四的慢腾腾宫:
666
BOS中设置控件背景色问题 -
h5522747:
解决办法?你动动脑子好不好,问题原因都告诉你了,解决办法用你的 ...
Based on configured schedule, the given trigger will never fire -
daishy:
楼主还在不在。。。。 求demo,邮箱283863275@ ...
DWZ整合zTree(实现版) -
xiaosheng_papa:
楼主还在不在。。。。 求demo,邮箱272457017@ ...
DWZ整合zTree(实现版) -
xiaosheng_papa:
这上面有点不详细,跟着步奏不行啊,可否来分demo,3Q。。。 ...
DWZ整合zTree(实现版)
import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class Goods { private String id; private double price; public Goods(){ System.out.println("it is a pen"); } public Goods(String s1,String s2){ System.out.println(s1+"*"+s2); } public String getId() { System.out.println(id); return id; } public void setId(String id) { this.id = id; } public String addName(String str1,String str2){ return str1+str2; } /** * @throws ClassNotFoundException * @throws IllegalAccessException * @throws InstantiationException * @throws NoSuchMethodException * @throws SecurityException * @throws InvocationTargetException * @throws IllegalArgumentException * @throws NoSuchFieldException * @功能描述 * @输入参数 * @反馈值 */ public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException { // TODO Auto-generated method stub String str = "com.xtlh.sinye.Goods"; Class c = Class.forName(str); Object obj = c.newInstance();//初始化一个Goods的对象 /** * //这里设置属性的值 调用setId()方法,类型用Class[],参数用Object[] */ Method m = c.getMethod("setId",new Class[]{Class.forName("java.lang.String")}); m.invoke(obj,new Object[]{"it's apple"}); System.out.println("---------------------------------------------------------------------"); /** * //这里是里获取属性的值 调用getId()方法 */ m = c.getMethod("getId",new Class[]{}); m.invoke(obj,new Object []{}); System.out.println("---------------------------------------------------------------------"); /** * //获得类中声明的方法 */ Method me[] = c.getDeclaredMethods(); for(int i=0;i<me.length;i++){ System.out.println("method["+i+"]="+me[i].toString()); } System.out.println("---------------------------------------------------------------------"); /** * //模拟 instanceof 操作符 */ boolean b1 = c.isInstance(new Integer(34)); System.out.println("Goods is a instance of Integer ? "+b1); boolean b2 = c.isInstance(new Goods());//这里调用了无参的构造方法 System.out.println("Goods is a instance of Goods ? "+b2); System.out.println("---------------------------------------------------------------------"); /** * //找出类的方法,类的名称,类的方法的参数,类的方法的返回类型 */ Method med[] = c.getDeclaredMethods(); Method med1[] = c.getMethods();//从字面意思可以看出来,这里找到所有的方法,即可以找到继承来的方法等 for(int i=0;i<med.length;i++){ Method mee = med[i]; System.out.println("method # "+i+" name="+mee.getName()); System.out.println("declaring class ="+mee.getDeclaringClass()); //方法的参数类型 Class pvec[] = m.getParameterTypes(); for(int j=0;j<pvec.length;j++){ System.out.println("parameter # "+j+" ="+pvec[j]); } //方法的异常 Class evec[] = m.getExceptionTypes(); for (int j = 0; j < evec.length; j++){ System.out.println("exception #" + j + " " + evec[j]); } //方法的返回类型 System.out.println("return type = " + mee.getReturnType()); } System.out.println("---------------------------------------------------------------------"); /** * //获取类的构造函数 */ Constructor ctorlist[] = c.getDeclaredConstructors(); for(int i=0;i<ctorlist.length;i++){ Constructor cons = ctorlist[i]; System.out.println("Constructor #"+i+" name="+cons.getName()); Class[] consParaType = cons.getParameterTypes();//获得构造函数的参数类型 if(consParaType.length==0){ System.out.println("Constructor have no parameters"); }else{ for(int j=0;j<consParaType.length;j++){ System.out.println("Constructor Parameter type #"+j+" name="+consParaType[j]); } } } System.out.println("---------------------------------------------------------------------"); /** * //获取类的属性 */ Field fieldlist[] = c.getDeclaredFields(); for(int i=0;i<fieldlist.length;i++){ Field field = fieldlist[i]; System.out.println("Filed #"+i+" name="+field.getName());//属性名称 System.out.println("Filed #"+i+" type="+field.getType());//属性类型 int mod = field.getModifiers(); System.out.println("modifiers = " + Modifier.toString(mod));//属性的修饰符 private/public/protected } System.out.println("---------------------------------------------------------------------"); /** * //根据方法的名称来执行方法 */ Class cls = Class.forName("com.xtlh.sinye.Goods"); Class partypes[] = new Class[2]; partypes[0] = String.class;//更多类型 Long.TYPE Integer.TYPE,或者使用Long.class、Integer.class partypes[1] = Class.forName("java.lang.String"); Method meth = cls.getMethod("addName", partypes); Goods goods = new Goods(); Object arglist[] = new Object[2]; arglist[0] = new String("love"); arglist[1] = new String("grape"); Object retobj = meth.invoke(goods, arglist); String retval = (String) retobj; System.out.println(retval); System.out.println("---------------------------------------------------------------------"); /** * 创建对象,根据指定的参数类型找到相应的构造函数并执行它,以创建一个新的对象实例。使用这种方法可以在程序运行时动态地 创建对象,而不是在编译的时候创建对象,这一点非常有价值 */ Class clss = Class.forName("com.xtlh.sinye.Goods"); Class partypess[] = new Class[2]; partypess[0] = String.class; partypess[1] = String.class; Constructor ct = clss.getConstructor(partypess); Object arglists[] = new Object[2]; arglists[0] = new String("hello"); arglists[1] = new String("orange"); Object retobjs = ct.newInstance(arglists); System.out.println("---------------------------------------------------------------------"); /** * //改变属性的值 */ Class ccc = Class.forName("com.xtlh.sinye.Goods"); Field fld = ccc.getDeclaredField("price"); Goods goods1 = new Goods(); System.out.println("price = " + goods1.price); fld.setDouble(goods1, 25.0); System.out.println("price = " + goods1.price); System.out.println("---------------------------------------------------------------------"); /** * //简单使用数组,创建了 10 个单位长度的 String 数组,为第 5 个位置的字符串赋了值,最后将这个字符串从数组中取得并打印 了出来 */ Class cla = Class.forName("java.lang.String"); Object arr = Array.newInstance(cla, 10); Array.set(arr, 5, "hello Watermelon"); String s = (String) Array.get(arr, 5); System.out.println(s); System.out.println("---------------------------------------------------------------------"); /** * //复杂数组使用,例中创建了一个 5 x 10 x 15 的整型数组,并为处于 [3][5][10] 的元素赋了值为 37。注意,多维数组实际上 就是数组的数组,例如,第一个 Array.get 之后,arrobj 是一个 10 x 15 的数组。进而取得其中的一个元素,即长度为 15 的数组,并使用 Array.setInt 为它的第 10 个元素赋值。 注意创建数组时的类型是动态的,在编译时并不知道其类型。 */ int dims[] = new int[]{5, 10, 15}; Object array = Array.newInstance(Integer.TYPE, dims); Object arrobj = Array.get(array, 3); Class cl = arrobj.getClass().getComponentType(); System.out.println(cl); arrobj = Array.get(arrobj, 5); Array.setInt(arrobj, 10, 37); int arrcast[][][] = (int[][][]) array; System.out.println(arrcast[3][5][10]); } }
发表评论
-
子类与父类的初始化
2012-02-27 16:22 1067class Parent{ int x=10; ... -
Java中注解的实例应用
2011-04-04 22:55 842Annotation在java的世界正铺天盖地展开,有空写这一 ... -
Java中注释的理解
2011-04-04 22:39 786J2SE5.0中新特性:注释 一、什么是注释 说起注释,得先 ... -
MyEclipse8.6安装反编译插件
2011-03-01 20:56 2096下载jad.exe文件:http://www.varaneck ... -
继承、多态,重载、重写的区别与总结
2010-12-07 13:04 855什么是多态?它的实现 ... -
项目中经常出现的错误
2010-12-07 12:58 3713项目中遇到的错误(c9bcf64c) sql错误 找不到列 U ... -
Java转义字符
2010-11-11 10:32 908JAVA中转义字符: 1.八进 ... -
java 的版本异常 Bad version number in .class file
2010-11-05 14:21 1057java.lang.UnsupportedClassVersi ... -
判断字符串是否为数字的三种方法
2010-06-12 18:21 8711.用JAVA自带的函数 public static boo ... -
Java随即生成指定长度字符串
2010-06-12 18:15 3003/** * 生成制定长度验证码 * @param ... -
Java 处理日期
2010-06-12 18:10 835public static final String Form ... -
java 拷贝文件
2010-06-12 17:57 1031第一种方法:古老的方式 public static ... -
Java操作Properties文件
2010-05-09 12:38 1999package com.club.soap.tools; ... -
限制类实例化次数
2010-03-28 12:45 1235public class NewClassCount { ... -
java用字节数截取字符串【原创】
2010-03-27 22:16 925估计这个题目应该不陌生,最近开发项目遇到按照字节数 ...
相关推荐
Java反射机制经典案例
java反射机制应用,文档中列举了使用java反射机制的各个应用场景,加以代码实例,使用学习非常方便。
java的反射机制的应用实例,对反射的机制很好的理解!
代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。
常见的应用如下 逆向代码 ,例如反编译 与注解相结合的框架 例如Retrofit 单纯的反射机制应用框架 例如EventBus 2.x 动态生成类框架 例如Gson Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第8页...
反射实例-JAVA反射机制,基本知识介绍和简单的应用
Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件 之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内 部信息,而不是...
JAVA反射机制与类的加载,详细的说明java反射机制的实例以及应用是入门级的课件
本文档对Java中使用最广的反射进行了深度而让人简单容易理解的解析,附有实例,可供致力于java底层研究的人提供借鉴
本实例教程分反射对成员变量、构造器、方法操作,详尽而简略得列出反射机制的应用,希望对大家有用。
·课程共30天,715个知识视频小节,涉及主流Java使用的方方面面,全而不冗余 ·全程内容涵盖数据结构、设计模式、JVM内存结构等深度技术 ·企业级笔试面试题目深入源码级讲解,拒绝死记硬背 4.代码量更大、案例更...
Java 的反射机制是使其具有动态特性的非常关键的一种机制,也是在JavaBean 中广泛应用的一种特性。 运用JavaBean 的最常见的问题是:根据指定的类名,类字段名和所对应的数据,得到该类的实例,下面的例子演示了...
适用于有一定Java编程基础的开发人员,希望了解和应用Java反射机制的使用者。 使用场景及目标 使用反射机制的典型场景包括以下几个方面: 在运行时动态加载和创建类对象。 通过反射调用对象的方法和访问对象的字段...
1简单反射机制实例 2各各方法以及类的应用实例 3代理模式 内有详细讲解说明保证大家理解并会应用反射
Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...
要使用蓝牙设备进行通讯必须的先使两个设备之间建立连接,Android SDK中提供了一些方法可供调用,但是有些方法没有提供接口,于是参考了网上的一些资料写了这个例子,顺便学习下Android反射机制的使用,自测OK,留待...
1、到底什么叫反射 2、Class类的作用 3、Class类的实例化三种...Class类在一般的基本开发是不会有任何作用的,完全可以不会,但是,对于一些高端的开发框架,所有的基本的核心原理都在于反射机制的应用上。 8、代理模式
这是『Java学习指南系列』的第18篇教程 ,是Java开发的高级课程,介绍反射机制、注解和框架设计的一般性原理。 二、主要内容 本篇包含以下内容: * 使用反射机制,读取Class中的字段信息 * 使用反射机制,对...
详细介绍Java中类的反射机制,并附带实例程序供参考使用。