Java Reflection (JAVA反射)
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。
Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。
JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。
像Struts2.0 Hibernate Spring 都是利用了这一特性。
下面先看一个简单例子 打印一个类里面的属性和方法,代码比较简单,在这里久不解释了,运行一下看看结果就明白了。
-
importjava.lang.reflect.Field;
-
importjava.lang.reflect.Method;
-
importjava.lang.reflect.Modifier;
-
publicclassTest{
-
publicstaticvoidmain(String[]args){
-
show("java.util.Date");
- }
-
-
-
@SuppressWarnings("unchecked")
-
privatestaticvoidshow(StringclassName){
-
try{
- Classc=Class.forName(className);
-
- Field[]fields=c.getDeclaredFields();
-
System.out.println(className+"类包含的属性有:");
-
for(Fieldf:fields){
-
intmod=f.getModifiers();
-
System.out.println(((mod==0)?""
-
:(Modifier.toString(mod)+""))
-
+getTypeName(f.getType())+""+f.getName());
- }
-
System.out.println("------------------------------------------------");
-
- Method[]methods=c.getDeclaredMethods();
-
System.out.println(className+"类包含的方法有:");
-
StringBuffersb=newStringBuffer();
-
for(Methodm:methods){
-
intmod=m.getModifiers();
-
if(mod!=0){
-
-
sb.append(Modifier.toString(mod)+"");
- }
-
sb.append(getTypeName(m.getReturnType())+"");
-
sb.append(m.getName()+"(");
- Class[]params=m.getParameterTypes();
-
for(intj=0;j<params.length;j++){
- sb.append(getTypeName(params[j]));
-
if(j<(params.length-1))
-
sb.append(",");
- }
-
sb.append(")");
- System.out.println(sb.toString());
-
sb.delete(0,sb.length());
- }
-
}catch(Exceptione){
- e.printStackTrace();
- }
- }
-
-
-
@SuppressWarnings("unchecked")
-
privatestaticStringgetTypeName(Classtype){
-
if(type.isArray()){
-
try{
- Classcl=type;
-
intdimensions=0;
-
while(cl.isArray()){
- dimensions++;
- cl=cl.getComponentType();
- }
-
StringBuffersb=newStringBuffer();
- sb.append(cl.getName());
-
for(inti=0;i<dimensions;i++){
-
sb.append("[]");
- }
-
returnsb.toString();
-
}catch(Throwablee){
- }
- }
-
returntype.getName();
- }
- }
-
在制作这个例子的时候参考了java.lang.reflect.Method.toString() 方法 和java.lang.reflect.Field.toString()方法。
今天先来个简单的例子,下一篇将介绍如何利用反射机制。最常用的就是 从request 到pojo的属性拷贝,以及两个JavaBean之间的属性复制
分享到:
相关推荐
Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于,它打破了编译时的束缚,使得代码具有更高的灵活性和可扩展性。在Java中,反射主要依赖于`...
"浅析Java 反射机制的用途和缺点" Java 反射机制是一种强大的技术,可以让应用程序做一些几乎不可能做到的事情。它可以让程序在运行时检测或修改程序行为,是 Java 语言中一个相对高级的特性。开发者可以使用反射...
Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于,它打破了程序编译时的静态性,提供了对类、接口、字段和方法的动态访问能力。通过反射,...
【Java泛型】Java泛型是自Java SE 1.5版本引入的一种强大的类型系统增强,旨在提升代码的安全性和重用性。它允许我们在编写代码时指定容器(如List、Set、Map等)能存储何种类型的元素,从而避免运行时的类型转换...
枚举单例模式是Joshua Bloch在《Effective Java》中推荐的实现方式,它既保证了线程安全,又避免了反射和序列化攻击,简洁且安全。 ```java public enum SingletonClass { INSTANCE; } ``` 调用方式是`...
Java反射机制(Reflection)是Java语言提供的一种强大的能力,它允许程序在运行时动态地获取类的信息并操作类的对象。这种机制使得Java具备了高度的灵活性和动态性,尤其是在处理未知类或者需要根据条件动态调用类的...
Java注解框架是Java编程语言中的一个重要特性,它允许开发者在代码中添加元数据,以提供额外的信息,如编译器指令、运行时检查或框架的配置信息。注解的本质是与程序代码关联的特殊标记,它们在编译时或运行时通过...
7. **Java中的反射机制**:反射允许程序在运行时检查类、接口、字段和方法的信息,动态创建对象并调用方法。它是Java动态性的重要体现,广泛应用于插件系统、框架和测试工具。 8. **Java中Heap与Stack的区别**:堆...
5、反射概念:Java从第一天开始就在内部具有反射概念,如接口,重复类,抽象类或方法概念。PHP 5.0以前没有任何反射概念,从PHP 5.0开始,它引入了这个功能,但与Java相比并没有那么大的进步。 6、页面加载速度:...
在Java的Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,它允许开发者在请求处理的前后阶段执行自定义逻辑,比如进行权限检查、日志记录、性能统计等。这篇文章将深入探讨Spring MVC拦截器的作用、实现...
在现代编程环境中,如.NET Framework和Java,反射扮演着重要角色。它可以减少开发者必须考虑的问题数量,并且使得创建更高效的工具变得可能。例如,在.NET Framework中,公共语言运行时(CLR)提供了安全、垃圾回收...
### Android框架浅析之锁屏(Keyguard)机制原理 #### 一、锁屏界面的组成 锁屏(Keyguard)是Android系统中的一个重要组成部分,它主要用于保护用户的隐私数据不被未授权访问。锁屏功能主要由两个部分组成:解锁...
JFinal 是一个基于Java语言的轻量级Web开发框架,其设计目标是简化开发、提高效率,让开发者能够更专注于业务逻辑的实现。本篇文档将对JFinal的技术架构进行浅析,帮助读者理解其核心设计理念和工作原理。 1. **...
在Java编程语言中,`hashCode()`与`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将详细介绍这两个方法的工作原理、使用场景以及在Java集合框架...
概念 代理模式是基本的设计模式之一,它是开发者为了提供额外的或... Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以参见博客Java发射机制浅析。 原理 Spring核心AOP实现技术之一是采用
本文将浅析当前几种主流的道路检测技术要点及其应用情况。 首先,探地雷达技术(GPR)是近年来广泛应用于道路检测的技术之一。它通过发射电磁波并接收其在地下介质中传播的回波,从而识别和评估路面下方结构的状况...
- **类和结构体**:JNI支持对Java类的反射操作,以及将Java对象映射到C/C++的结构体。 5. **学习资源**: - "Android JNI开发入门与提高":这份文档可能涵盖了JNI的基础知识,如如何创建和调用本地方法,以及进阶...
在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一组接口和类。当我们使用JDBC操作MySQL数据库时,通常会在代码中看到`Class.forName("com.mysql.jdbc.Driver")`这一行,这行代码的...