- 浏览: 365724 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
驭乐MJ:
你好,我卸载rar后,按命令执行安装unrar或者是p7zip ...
Ubuntu rar 乱码问题 -
郭建雄:
不错,受用了,谢谢你的分享 !
java线程中的interrupt,isInterrupt,interrupted方法 -
zuosheng:
...
用ViewFlipper实现各种切换动画 -
lxtkong-029:
原来一直不是很清楚,看来你的文章明白了,太感谢了!
java线程中的interrupt,isInterrupt,interrupted方法 -
ihopethatwell:
嗯,看到了,要在项目中添加jni
Ubuntu 10.04安装android NDK
一. 反射机制描述
Java的反射机制允许程序在运行时透过反射API取得任何一个已知名称的class的内部信息,主要包括属性名,属性名的修饰符,方法名,方法返回值,方法修饰符等信息。
二. Java类反射中的主要方法
Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数,
Constructor[] getConstructors() -- 获得类的所有公共构造函数
Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关)
Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关)
获得字段信息的Class 反射调用不同于那些用于接入构造函数的调用,在参数类型数组中使用了字段名:
Field getField(String name) -- 获得命名的公共字段
Field[] getFields() -- 获得类的所有公共字段
Field getDeclaredField(String name) -- 获得类声明的命名的字段
Field[] getDeclaredFields() -- 获得类声明的所有字段
用于获得方法信息函数:
Method getMethod(String name, Class[] params) -- 使用特定的参数类型,获得命名的公共方法
Method[] getMethods() -- 获得类的所有公共方法
Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,获得类声明的命名的方法
Method[] getDeclaredMethods() -- 获得类声明的所有方法
三. Java反射机制应用初探
现在一堆框架搞得人云里雾里的,例如spring等等,大都利用了Java的反射机制,eg. 大名鼎鼎的IOC.昨天晚上闲着没事的时候,初试了下反射,下面是一个简单的测试例子:
import java.awt.Button;
import java.lang.reflect.Method;
import java.util.Hashtable;
/**
* 测试Java的反射机制
* @author Amigo Xie(xiexingxing1121@126.com)
* @since 2007/04/20 21:40
*/
public class ReflectionTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
ReflectionTest reflection = new ReflectionTest();
reflection.getNameTest();
System.out.println("");
reflection.getMethodTest();
}
/**
* Class的getName()方法测试
* @throws Exception
*/
public void getNameTest() throws Exception {
System.out.println("===========begin getNameTest============");
String name = "amigo";
Class cls = name.getClass();
System.out.println("string class name: " + cls.getName());
Button btn = new Button();
Class btnClass = btn.getClass();
System.out.println("button class name: " + btnClass.getName());
Class superBtnClass = btnClass.getSuperclass();
System.out.println("super button class name: " + superBtnClass.getName());
Class clsTest = Class.forName("java.awt.Button");
System.out.println("clsTest name: " + clsTest.getName());
System.out.println("===========end getNameTest============");
}
/**
* Class的getMethod()方法测试
* @throws Exception
*/
public void getMethodTest() throws Exception {
System.out.println("===========begin getMethodTest==========");
Class cls = Class.forName("ReflectionTest");
Class ptypes[] = new Class[2];
ptypes[0] = Class.forName("java.lang.String");
ptypes[1] = Class.forName("java.util.Hashtable");
Method method = cls.getMethod("testMethod", ptypes);
Object args[] = new Object[2];
args[0] = "hello, my dear!";
Hashtable ht = new Hashtable();
ht.put("name", "amigo");
args[1] = ht;
String returnStr = (String) method.invoke(new ReflectionTest(), args);
System.out.println("returnStr= " + returnStr);
System.out.println("===========end getMethodTest==========");
}
public String testMethod(String str, Hashtable ht) throws Exception {
String returnStr = "return str";
System.out.println("begin testMethod invoked");
System.out.println("str= " + str);
System.out.println("name= " + (String) ht.get("name"));
System.out.println("end testMethod invoked");
return returnStr;
}
}
控制台输出如下:
===========begin getNameTest============
string class name: java.lang.String
button class name: java.awt.Button
super button class name: java.awt.Component
clsTest name: java.awt.Button
===========end getNameTest============
===========begin getMethodTest==========
begin testMethod invoked......
str= hello, my dear!
name= amigo
end testMethod invoked......
returnStr= return str
===========end getMethodTest==========
参考文章:
《侯捷观点--Java反射机制》
《java反射机制》 http://hi.baidu.com/javatwt/blog/item/9aeffd13ddfb65025aaf53d4.html
转自:http://www.blogjava.net/amigoxie/archive/2007/04/21/112421.html
发表评论
-
通过FutureTask设置超时,用于请求网络,执行任何异步超时任务
2013-10-10 15:53 0public class TestConnectTimeOu ... -
java Future 接口介绍
2011-11-23 15:47 1077在Java中,如果需要设定 ... -
Java 判断文件的编码
2011-05-23 18:28 992首先,不同编码的文本,是根据文本的前两个字节来定义其编 ... -
Eclipse中附上/载入Java(JDK) 源代码
2011-05-18 15:04 1091在Eclipse中,大家都习惯按F3键方便地查看类、方法 ... -
java 经典排序算法
2011-05-18 14:43 6831、冒泡排序 Bubble Sort 最简单的排序方法 ... -
java版的二分查找算法
2011-05-18 11:42 761/** * @param data 从小到大排好序的 ... -
java 集合
2011-04-11 11:47 939这里说的集合指的是 ... -
JNI javah 未找到 javadoc: 错误 - 找不到类
2011-03-30 12:18 2491在编译生成 .class 文件后,进入该文件目录 ,执行类似 ... -
Java关键字new和newInstance的区别方法
2011-03-15 15:07 747在初始化一 ... -
Java内存管理的9个小技巧
2011-03-02 22:55 6991、别用new Boolean()。 在很多场景中Boole ... -
java 正则表达式 常用符号总结
2011-02-28 13:40 1070•句点.表示单个字符 •方括号[]表示可能出现字符集里 ... -
全局变量的优缺点
2011-02-15 10:06 2549使用全局变量的优点是:可以减少变量的个数,减少由于实际参数和形 ... -
JAVA代码编写的30条建议
2011-02-14 17:57 729(1) 类名首字母应该大写。字段、方法以及对象(句 ... -
java传值or传引用 二
2011-02-14 16:32 883(接一) 5. 如何实现类似 swap 的方法 传 ... -
java传值or传引用 一
2011-02-14 16:25 943第一种说法 1. 简单类型是按值传递的 Jav ... -
java线程中的interrupt,isInterrupt,interrupted方法
2011-02-11 10:23 5592在java的线程Thread类中有三个方法,比较容易混淆,在这 ... -
进程和线程的区别
2011-02-11 09:51 895通俗一点说 ... -
Java线程之守护线程(Daemon)
2011-02-06 12:59 752Java有两种Thread:“守 ... -
java 异常总汇
2011-01-26 16:52 9261. java.lang.nullpointerexcepti ... -
关于java的集合类,以及HashMap中Set的用法!
2011-01-25 17:37 4280关于java的集合类,以及HashMap中Set ...
相关推荐
Java反射机制是Java编程语言的一项重要特性,它允许程序在运行时动态地获取类的信息,并且能够对类的属性和方法进行操作。反射机制的核心在于Java的`java.lang.reflect`包,其中包含了`Class`、`Constructor`、`...
总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...
java学习笔记java反射机制
本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理对象、类、接口以及它们之间的关系...
自己总结的java反射机制的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者
Java反射机制是Java编程语言中一个强大的特性,它允许运行时的程序动态地获取类的信息并操作类的对象。在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包下的类如`Constructor`、`Method`和`...
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
8. **反射机制**:探讨Java反射API的使用,包括动态获取类信息、创建对象、调用方法等功能,这对于理解和调试程序有很大的帮助。 9. **JVM内部机制**:简述Java虚拟机的工作原理,包括类加载、内存管理、垃圾回收...
本篇笔记将深入探讨Java反射的概念、重要性以及如何使用。 一、反射基础 1. 类加载:当Java虚拟机(JVM)加载一个类时,它会创建该类的Class对象。这个对象包含了关于类的所有信息,包括方法、字段、构造器等。...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在深入理解这个知识点之前,我们首先需要了解什么是反射。反射是指在运行时,程序可以获取类的...
### Java李兴华学习笔记之Java常用类库 #### 一、课程介绍及知识点概览 根据提供的资料,“Java李兴华学习笔记之Java常用类库”这份文档来源于北京MLDN软件实训中心的教学资料,主要涵盖了Java编程语言中常用类库...
"Java入门第三季学习笔记"可能涵盖了更多高级话题,如反射、注解、设计模式和Java库的使用。反射允许程序在运行时检查类、接口、字段和方法的信息,提供了更大的灵活性。注解是一种元数据,可以用来提供编译器或运行...
Java反射机制是Java编程语言中的一个强大特性,它允许运行时的Java程序访问、操作类、接口、字段和方法的信息,甚至能够动态调用方法和创建对象。在深入理解Java反射机制之前,我们先要明白类加载的过程。当Java程序...
最后,书中还涉及了Java的反射机制和注解,这两个高级特性在编写灵活、动态的代码时非常有用。反射允许程序在运行时检查和修改类的信息,而注解则提供了一种元数据的方式,可以用于编译时检查、代码生成和运行时处理...
1. **反射**:Java反射机制允许在运行时检查类的信息(如类名、方法、字段等),并能动态调用方法和修改字段值,增强了代码的灵活性。 2. **泛型**:泛型提供了一种在编译时检查类型安全的方法,允许在类、接口和...
在上述内容中,作者提到了一个名为JBBDoc的项目,这可能是一个针对Java反射机制进行学习和记录的个人学习笔记项目。作者通过自己的学习和实践经验,创建了这个项目来帮助自己更好地理解Java反射机制,并希望这些笔记...
8. **反射机制**:Java反射API允许在运行时动态访问类的信息,包括类名、方法、字段等。学习笔记会讲解如何使用反射进行元编程,以及其在插件系统、序列化和动态代理中的应用。 9. **Java API和库**:Java标准库...
Java JDK 5.0是Java发展历程中的一个重要里程碑,它引入了许多新特性,极大地提升了开发效率和代码质量。..."良葛格Java JDK 5.0学习笔记"这份资料应该会详细解释这些概念,为初学者提供宝贵的参考资料。
在这个"良葛格Java JDK 5.0学习笔记ch05"中,我们将深入探讨其中的关键知识点。 一、泛型 Java 5.0引入了泛型,这是一项强大的类型安全机制,允许在编译时检查类型。泛型可以应用于类、接口和方法,通过指定参数...