- 浏览: 127160 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1494以树这样一个经典的案 ... -
赋值、引用
2012-03-02 15:12 1140此内容摘自《Thinking in j ... -
线程安全
2012-03-02 14:47 1065谈到线程安全,对于许多初学者来说很容易引起概念上的混淆。线程安 ... -
java io常用api
2011-04-06 11:27 1545字节处理类都继承自InputStream和OutPutStre ... -
剔除List中的重复值
2010-10-09 10:28 1170本文转自:http://yangfuchao418.iteye ... -
Java反射机制
2010-09-20 09:48 727JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个 ... -
接口 Iterator<E> (from API)
2010-08-23 08:33 964public interface Iterator<E& ... -
Map
2010-08-19 09:34 1171/* * 遍历Map */ Map<String, ... -
数组操作工具类Arrays
2010-07-24 14:57 1212java.util.Arrays类中包含了 ... -
Object... values的用法
2010-07-21 11:27 3339public abstract List find(Strin ... -
生成验证码图片、获取验证码
2010-07-17 11:55 1788在HTML中放一个文本框,一个img,如下: 验证码:< ... -
读取properties资源特性文件的值(键值对)、路径
2010-07-16 18:28 2773读取资源文件中的类为: import java.io.IOEx ... -
java日期格式化类
2010-07-16 18:15 1203import java.text.ParseException ... -
java异常
2010-02-01 18:25 1048运行时异常: RuntimeException类及其子类都被称 ...
相关推荐
在这个“Java学习常用API”中,我们可能会涵盖以下关键知识点: 1. **基础类库**: - **String类**:用于处理文本字符串,提供了大量的操作方法如concat、substring、indexOf等。 - **ArrayList和LinkedList**:...
Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了运行时的类信息。通过Class对象,我们...
java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类...
以上只是Java API中的一部分关键知识点,实际开发中还会涉及到更多如XML处理、数据库连接(JDBC)、国际化(java.text包)以及并发工具类等内容。Java API的广泛性和深度使得开发者能够应对各种复杂的编程需求。
这份“java常用API文档合集”包含了多个重要的API文档,对于Java和前端开发者来说是宝贵的参考资料。 1. **Java基础API**:Java的基础API包括了`java.lang`、`java.io`、`java.util`等包,它们提供了基本的数据类型...
### Java反射机制的原理及在Android下的简单应用 #### 一、Java反射机制的基本概念 反射(Reflection)是指程序在运行时能够访问、检测和修改它自身的能力。这种能力使得程序能够动态地获取自身的结构信息并操作...
java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,...
以上就是Java常用API的一些关键知识点,掌握这些基础将有助于你编写更高效、可维护的Java代码。在实际开发中,还需要深入学习异常处理机制、多线程、反射、注解等高级特性,以及框架如Spring、MyBatis等,以提升开发...
8. **反射机制**:Java反射允许程序在运行时检查类、接口、字段和方法的信息,并能动态创建对象和调用方法。例如: ```java Class<?> clazz = Class.forName("java.util.ArrayList"); Object instance = clazz.new...
Java反射机制涉及到的主要API位于`java.lang.reflect`包中,主要包括以下几个类: 1. **Class类**:代表了一个类或接口。每个类都有一个与之对应的Class对象。可以通过Class对象获取类的信息,如字段、方法和构造器...
6. **反射机制**:Java的反射API允许在运行时动态获取类的信息(如类名、方法名等)并调用其成员。Class类是反射的入口,它代表了Java类的运行时表示。 7. **泛型**:泛型是Java 5引入的新特性,增强了类型安全,...
4. **反射**:Java反射机制允许在运行时检查类、接口、字段和方法的信息,并能够动态地创建对象和调用方法。这在框架设计、插件系统、元编程等场景下非常有用。反射API包括`java.lang.Class`、`java.lang.reflect....
本资料“java常用API-适合初学者”旨在帮助初学者快速掌握Java API的基本用法和核心概念。 1. **基础类库** - **Object类**:所有Java类的父类,包含equals()、hashCode()、toString()等方法。 - **String类**:...
7. **反射**:`java.lang.reflect`包提供了反射API,允许程序在运行时动态获取类的信息并操作类的对象。 8. **注解(Annotation)**:自Java 5起,注解成为了一种强大的元数据机制,可以用于编译时检查、运行时处理...
Java反射API允许程序在运行时动态地获取类的信息,并对类的对象进行操作。Class类代表类,Method类代表方法,Field类代表字段,Constructor类代表构造器。反射机制在动态代理、插件系统、序列化等方面有广泛应用。 ...
9. **反射机制**:Java的反射机制允许程序在运行时动态地获取类的信息并操作类的对象,`java.lang.reflect`包提供了相关的类和接口。 10. **国际化和本地化**:`java.text`和`java.util.Locale`支持多语言环境,...