- 浏览: 124942 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
AlexBlume:
...
js中“使用”el表达式 -
xiaoyuer9953:
这两天正需要这个,很好!
json-lib-2.4-jdk15.jar 组装json字符串 -
liuyue513:
...
MyEclipse下debug调试 -
Fs_sky:
谢了,太厉害了!
Object... values的用法 -
ooo456mmm:
goood
MyEclipse下debug调试
Class是Reflection故事起源。针对任何您想探勘的class,唯有先为它产生一个Class object,接下来才能经由它唤起为数十多个的Reflection APIs。首先看看Class,反射的核心类,所有的操作都是围绕该类来生成的。
Java允许我们从多种管道为一个class生成对应的Class object:
以下是反射的一个入门级的类:
Java允许我们从多种管道为一个class生成对应的Class object:
//运用Class.forName() Class c1 = Class.forName("java.lang.String"); //运用getClass(),每个object都有此方法 String str = "abc"; Class c2 = str.getClass(); //运用getSuperclass(),每个class对象都有此方法 Button b = new Button(); Class c3 = b.getClass(); Class c4 = c3.getSuperclass(); //运用.class 語法 Class c5 = String.class; Class c6 = Integer.class;//java.lang.Integer Class c7 = java.awt.Button.class; Class c8 = int.class;//Integer.TYPE==int.class Class c9 = int[].class; //运用primitive wrapper classes(原始包装类)的TYPE语法 Class c10 = Integer.TYPE;//表示基本类型int的Class实例,与int.class返回结果一样 Class c11 = Byte.TYPE; Class c12 = Character.TYPE; Class c13 = Short.TYPE; Class c14 = Boolean.TYPE; Class c15 = Long.TYPE; Class c16 = Float.TYPE; Class c17 = Double.TYPE; Class c18 = Void.TYPE;
以下是反射的一个入门级的类:
package com.web.util; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionUtil { public String name = "Gerry"; public int age = 22; public Integer rank = 10; private int a = 1; public ReflectionUtil(){ } public ReflectionUtil(String name,int age){ this.name = name; this.age = age; } public String toString(){ return this.name + " : " + this.age; } public String say(String s){ System.out.println(s); return this.toString(); } public void sayy(){ System.out.println("无参"); } public static void say(){ System.out.println("静态方法调用时,不需要传一个对象"); } /** * 运行时生成instance,无参构造 */ public void testConstrutor() throws Exception{ Class c = Class.forName("com.web.util.ReflectionUtil"); Object obj = c.newInstance(); System.out.println(obj.toString()); //类的一些信息 int flag = c.getModifiers();//表示该类修饰符的 int Package pack = c.getPackage(); System.out.println("包名:"+pack.getName());//包名 System.out.println(c.getName());//类的完整类名 System.out.println("类修饰符:"+Modifier.toString(flag));//类修饰符 System.out.println("是否接口:"+Modifier.isInterface(flag));//是否接口 } /** * 运行时生成instance,有参数的构造 */ public void testConstrutorByArgs() throws Exception{ Class c = Class.forName("com.web.util.ReflectionUtil"); Class[] ptypes = new Class[]{String.class,int.class};//Class[] ptypes = {String.class,Integer.TYPE}; Constructor ctor = c.getConstructor(ptypes); Object[] arg = {"HaiMei",23}; Object obj = ctor.newInstance(arg); System.out.println(obj.toString()); } /** * 运行时调用method,有参数 */ public void testMethodByAgrs() throws Exception{ Class c = Class.forName("com.web.util.ReflectionUtil"); Class ptypes[] = {String.class}; Method m = c.getMethod("say", ptypes); ReflectionUtil obj = new ReflectionUtil(); obj.name = "Gerry"; obj.age = 40; Object[] arg = {"invoke say()"}; Object r = m.invoke(obj, arg); System.out.println((String)r); } /** * 运行时调用method,无参数 */ public void testMethod() throws Exception{ Class c = Class.forName("com.web.util.ReflectionUtil"); Class ptypes[] = {}; Method m = c.getMethod("sayy", ptypes); ReflectionUtil obj = new ReflectionUtil(); Object[] arg = {}; Void v = (Void) m.invoke(obj, arg); //返回值为void时 } /** * 运行时调用静态method,invoke时不需要传一个对象 */ public void testMethodStatic() throws Exception{ Class c = Class.forName("com.web.util.ReflectionUtil"); Class ptypes[] = {}; Method m = c.getMethod("say", ptypes); Object[] arg = {}; m.invoke(null, arg); } /** * 获取Field值、设置field值 */ public void testField() throws Exception{ ReflectionUtil obj = new ReflectionUtil(); Class c = obj.getClass(); Field f = c.getField("name"); System.out.println(f.getName()); System.out.println(f.getGenericType());//返回一个 Type 对象,该字段的声明类型 System.out.println(f.getType());//返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型 System.out.println((String)f.get(obj)); f.set(obj, "Bruce"); System.out.println((String)f.get(obj)); f = c.getField("age"); System.out.println((Integer)f.get(obj)); f.set(obj,24); System.out.println((Integer)f.get(obj)); } /** * 访问Field内容 */ public void testFields() throws Exception{ ReflectionUtil r = new ReflectionUtil(); Class c = r.getClass(); System.out.println("反射类中所有公有的属性:"); Field[] fPublic =c.getFields();//只能获取反射类中所有公有属性 for(int i=0; i<fPublic.length; i++){ Class cc = fPublic[i].getType(); System.out.println("fPublic:"+cc); } System.out.println("反射类中所有的属性(当然也包括私有的属性):"); Field[] fAll = c.getDeclaredFields();//可以获取反射类中所有的属性 for(int i=0; i<fAll.length; i++){ Class cl = fAll[i].getType(); System.out.println("fAll:"+cl); } System.out.println("反射类中私有属性的值:"); Field f = c.getDeclaredField("a"); f.setAccessible(true); Integer i = (Integer)f.get(r); System.out.println(i); } /** * 获取参数类型Class[]的方法 */ public Class[] getMethodClass(String[] type){ Class[] c = new Class[type.length]; for(int i=0; i<c.length; i++){ if(!type[i].trim().equals("") || type[i] != null){ if(type[i].equals("int") || type[i].equals("Integer")){ c[i] = Integer.TYPE; }else if(type[i].equals("float") || type[i].equals("Float")){ c[i] = Float.TYPE; }else if(type[i].equals("double") || type[i].equals("Double")){ c[i] = Double.TYPE; }else if(type[i].equals("boolean") || type[i].equals("Boolean")){ c[i] = Boolean.TYPE; }else{ c[i] = String.class; } } } return c; } /** * 获取参数Object[]的方法 */ public Object[] getMethodObject(String[] type, String[] param){ Object[] obj = new Object[param.length]; for(int i=0; i<obj.length; i++){ if(param[i] != null || !param[i].trim().equals("")){ if(type[i].equals("int") || type[i].equals("Integer")){ obj[i] = new Integer(param[i]); }else if (type[i].equals("float") || type[i].equals("Float")){ obj[i] = new Float(param[i]); }else if (type[i].equals("double") || type[i].equals("Double")){ obj[i] = new Double(param[i]); }else if (type[i].equals("boolean") || type[i].equals("Boolean")){ obj[i] = new Boolean(param[i]); }else{ obj[i] = param[i]; } } } return obj; } }
发表评论
-
经典算法之递归
2012-04-13 16:54 1320以树这样一个经典的案 ... -
赋值、引用
2012-03-02 15:12 1103此内容摘自《Thinking in j ... -
线程安全
2012-03-02 14:47 1040谈到线程安全,对于许多初学者来说很容易引起概念上的混淆。线程安 ... -
java io常用api
2011-04-06 11:27 1519字节处理类都继承自InputStream和OutPutStre ... -
剔除List中的重复值
2010-10-09 10:28 1145本文转自:http://yangfuchao418.iteye ... -
Java反射机制
2010-09-20 09:48 702JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个 ... -
接口 Iterator<E> (from API)
2010-08-23 08:33 943public interface Iterator<E& ... -
Map
2010-08-19 09:34 1140/* * 遍历Map */ Map<String, ... -
数组操作工具类Arrays
2010-07-24 14:57 1184java.util.Arrays类中包含了 ... -
Object... values的用法
2010-07-21 11:27 3256public abstract List find(Strin ... -
生成验证码图片、获取验证码
2010-07-17 11:55 1762在HTML中放一个文本框,一个img,如下: 验证码:< ... -
读取properties资源特性文件的值(键值对)、路径
2010-07-16 18:28 2744读取资源文件中的类为: import java.io.IOEx ... -
java日期格式化类
2010-07-16 18:15 1183import java.text.ParseException ... -
java异常
2010-02-01 18:25 1020运行时异常: RuntimeException类及其子类都被称 ...
相关推荐
java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类...
java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,...
Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...
java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类...
Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...
java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,...
java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类...
java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...
未经允许禁止转载,转载请联系作者。 目录 一 反射(Reflect)初识 二 反射的基本使用和常用API 2.1 基本使用 2.2 反射获取一个对象的步骤 2.3 反射常用API 2.3.1 获取反射中的Class对象 ...4.1 Java反射机制的起源
Day07:反射机制与内部类 Day08:异常与Swing图形界面 Day09:swing图形界面与AWT事件模型 Day10:JFC基础类库(具体类查看API) Day11:多线程-进程与线程及方法 Day12:线程机制与I/O流的方法 Day13:I/O流的类与...
整理的Java反射的常用的一些方式,采用xmind的形式整理出来。希望有能够用到的。将java代码的各个组成部分封装为其他对象,可以在程序运行过程中操作这些对象,这就是java的反射机制;
Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...
Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...
Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...
1.commons-beanutils.jar:提供对Java反射和自省API的包装,主要提供了对于 JavaBean进行各种操作。提供了对于JavaBean进行各种操作,克隆对象,属性等等. 2.commons-digester.jar:方便地将XML文档所定义的元素转化为...
java反射机制(共16页) java泛型(共11页) java封装继承多态(共56页) java集合(共38页) java接口(共21页) java类和对象方法以及包的使用(共56页) java类和对象方法以及包的使用(共62页) java判断循环...
DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....