- 浏览: 96919 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
rihui1hao:
总的来说还是不错的
3、Session的get()/load( ...
hibernate总结 -
Jassicr:
相见恨晚呐
java常用算法分析和实现(一) -
xuhang1128:
这是我看过的最好的讲解jvm内存管理,谢谢lz
JVM内存管理:深入垃圾收集器与内存分配策略 -
zcr789654123:
...
StringUtils api 中文 英文 对照
经过多方面的资料搜集整理,写下了这篇文章,本文主要讲解java的反射和内省机制,希望对大家有点帮助,也希望大家提出不同的看法! 1).反射是java的基础技术,在我们用到的框架如:struts,spring,hibernate,junit等都用到了反射技术,所以了解反射对我们来说也很重要。要了解反射技术,必须要了解一个类Class类。 2).平时我们定义class的时候都是小写,这里讲的Class是大写,此时它代表一类事物,java类用于描述一类事物的共性,如该类事物有什么属性,没有什么属性,至于这个属性的值是什么,则是由这个类的实例对象来确定,不同的事物对象有不同的属性值。java程序中的java类,属于同一类事物,描述这类事物的Java类名就是Class.,就比如众多的人可以用一个Person类表示一样,众多的java类用Class来表示。 3).Class类代表Java类,它(Class类)的各个实例对象分别对应各个类在内存中的字节码,那么什么叫字节码呢?java源程序被编译成一堆二进制的class代码,当我们需要用到某个类时,首先把类的字节码加载到内存中来,然后再用该字节码去复制一个个的实例对象来,每份字节码都是Class类的实例对象,即Class类的实例对象就代表内存中字节码。 4).一个类被类加载器加载到内存中,占用一片存贮空间,这个空间里的内容就是这个类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型就是Class类型. 5).如何得到各个字节码对应的实例对象?(Class类型):即得到字节码的三种方式: 例如: System.out.println(nowDate == tomDate);// false 6)Class.forName()的作用:得到这个类的字节码,包含下面两种情况 .7)8个基本类型和一个void共9个预定义的Class实例对象
1).通俗的讲,反射就是把java类中的各种成分映射成相应的java类.如一个java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等信息也用一个个的java类表示。那么java类的Class类显然要提供一系列的方法来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应的类的实例对象来表示,它们是Field,Method,Construtor,Package等。 JAVA反射机制是在运行状态中, 对于任意一个类,都能够得到这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.
3).Constructor类:Constructor类代表某个类中的一个构造方法. .1)得到某个类所有的构造方法:例如: Constructor[] cons = String.class.getConstructors(); 相关代码: 4).Field类:Field类代表类中的一个成员变量 public Point(Integer x, Integer y) { public static void main(String[] args) throws Exception { Integer valueX = (Integer) fieldX.get(reflect); // Field fieldY = Point.class.getField("y"); // // 下面的方法可以解决无法查看私有属性的方法
相关代码二: public String toString() { public class Reflect { private static void changeFieldValues(Point point) throws IllegalAccessException { 5).Method:Method类代表某个类中的一个构造方法; 1).内省(Introspector)是 Java 语言对 Bean 类属性、事件的一种缺省处理方法。例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。 Java 中提供了一套 API 用来访问某个属性的 getter/setter 方法,通过这些 API 可以使你不需要了解这个规则(但你最好还是要搞清楚),这些 API 存放于包 java.beans 中。 2).直接通过属性的描述器java.beans.PropertyDescriptor类,来访问属性的getter/setter 方法; 相关代码: public Point(Integer x, Integer y) { public Integer getX() { public void setX(Integer x) { public Integer getY() { public void setY(Integer y) { import java.beans.PropertyDescriptor; public class Reflect { public static void main(String[] args) throws Exception { getProperty(point, proName); } private static void setProperty(Point point, String proName) throws Exception { private static void getProperty(Point point, String proName) throws Exception { 3).通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后我们就可以通过反射机制来调用这些方法。 相关代码: 4).我们又通常把javabean的实例对象称之为值对象(Value Object),因为这些bean中通常只有一些信息字段和存储方法,没有功能性方法。一个JavaBean类可以不当JavaBean用,而当成普通类用。JavaBean实际就是一种规范,当一个类满足这个规范,这个类就能被其它特定的类调用。一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量(javabean的成员变量通常都是私有private的)。 5).除了反射用到的类需要引入外,内省需要引入的类如下所示,它们都属于java.beans包中的类,自己写程序的时候也不能忘了引入相应的包或者类。 6).下面讲解一些开源的工具类Beanutils,需要额外下载的,commons-beanutils.jar,要使用它还必须导入commons-logging.jar包,不然会出异常; BeanUtils.setProperty(point, proName, 8); 相关代码二: 相关代码三: 6).理解了相应的原理,那些现成的工具用起来就会更舒服,如Beanutils与PropertyUtils工具。这两个工具设置属性的时候一个主要区别是PropertyUtils.getPropety方法获得的属性值的类型为该属性本来的类型,而BeanUtils.getProperty则是将该属性的值转换成字符串后才返回。 总结 Web 开发框架 Struts 中的 FormBean 就是通过内省机制来将表单中的数据映射到类的属性上,因此要求 FormBean 的每个属性要有 getter/setter 方法。但也并不总是这样,什么意思呢?就是说对一个 Bean 类来讲,我可以没有属性,但是只要有 getter/setter 方法中的其中一个,那么 Java 的内省机制就会认为存在一个属性,比如类中有方法 setMobile ,那么就认为存在一个 mobile 的属性。 将 Java 的反射以及内省应用到程序设计中去可以大大的提供程序的智能化和可扩展性。有很多项目都是采取这两种技术来实现其核心功能,例如我们前面提到的 Struts ,还有用于处理 XML 文件的 Digester 项目,其实应该说几乎所有的项目都或多或少的采用这两种技术。在实际应用过程中二者要相互结合方能发挥真正的智能化以及高度可扩展性。 |
发表评论
-
SAX,DOM,JAXP,JDOM,DOM4J比较
2010-11-17 18:26 1745第一:首先介绍一下SAX,DOM,JAXP,JDOM,DOM4 ... -
java序列化和反序列化总结(转)
2010-11-13 21:18 923把Java对象转换为字节序列的过程称为对象的序列化。 ... -
一次Java垃圾收集调优实战(转)
2010-11-13 18:52 7251 资料 JDK5.0垃圾收集优化之--Don't Pa ... -
编写对GC友好,又不泄漏的代码
2010-11-13 18:33 653作者:江南白衣,最新 ... -
JVM内存管理:深入垃圾收集器与内存分配策略(转)
2010-11-13 18:24 635概述: 说起垃圾收集(Garbage Collection ... -
JVM内存管理:深入Java内存区域与OOM(转)
2010-11-13 18:13 696Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的 ... -
java线程安全总结(转)
2010-11-13 17:46 765浅谈java内存模型 ... -
注解(Annotation)使用详解(转)
2010-11-13 15:33 682注解(Annotation) 为我们在代码中天界信息提供了一 ... -
java泛型总结2
2010-11-13 14:55 6811 Java 泛型设计中的一些 ... -
java泛型总结1
2010-11-13 14:54 820//泛型代码 public class Pair< ... -
java异常总结
2010-11-12 18:20 911本文重在Java中异常机制的一些概念。写本文的目的在于方便我很 ... -
java IO总结
2010-11-12 17:14 623Java 流在处理上分为字 ... -
java对String字符串对象的创建以及管理总结
2010-11-12 16:33 882经常看到很多人讨论java ... -
java集合框架总结
2010-11-12 16:13 9101、Java容器类库的 ... -
java内部类总结
2010-11-12 15:18 876内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一 ... -
JVM内存管理:深入垃圾收集器与内存分配策略
2010-11-12 14:12 958Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的 ... -
jdk1.5垃圾回收机制
2010-11-12 13:59 1219Java开发Server最大的障碍,就是JDK1.4版之前的的 ... -
垃圾回收算法总结
2010-11-12 13:09 516最近找工作,被问了2次 ... -
Java的垃圾回收总结
2010-11-12 12:55 745内存是稀缺的资源,哪怕内存一块钱一条!如果在编程中使用不当,再 ...
相关推荐
### Java反射机制总结 #### 反射的概念与起源 反射的概念最早由Smith于1982年提出,指的是程序能够访问、检测并修改其自身状态或行为的能力。这一概念的提出迅速引起了计算机科学领域的广泛关注,并在之后的研究中...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...
java反射机制总结
### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...
总结,Java反射机制是Java平台灵活性和动态性的体现,它极大地扩展了Java程序的能力,但同时也需要谨慎使用,平衡好其带来的便利和潜在问题。学习和理解反射机制对于深入理解Java以及开发复杂系统至关重要。
### Java反射机制详解 #### 一、Java反射机制概述 Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息并操作对象。Java反射机制的主要作用包括:获取类的所有属性和方法、构造动态实例、调用...
Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 ...总结而言,Java反射机制是构建灵活、可扩展应用程序的强大工具。然而,在使用反射时,开发者应当权衡其带来的好处和潜在的风险,确保合理有效地利用这一特性。
JAVA中的反射机制是Java语言的一项强大特性,它允许运行中的Java程序对自身进行检查...阅读“JAVA反射机制.pdf”和“Java反射机制总结.pdf”这两份文档,将有助于进一步理解这个主题,同时提供具体的示例和实践指导。
### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至修改自身的状态和行为。这种能力一经提出,迅速成为了计算机科学领域的研究...
Java反射机制是Java编程语言中...总结起来,Java反射机制是Java编程中一种强大的工具,它扩展了程序的动态性,使得开发者能够在运行时对类进行灵活的操作。然而,使用时需谨慎,平衡好灵活性和性能、安全性之间的关系。
Java反射机制笔记 Java反射机制是Java语言中一个强大的功能,它允许程序在运行时检查和修改其自身的结构和行为。通过Java反射机制,我们可以在运行时获取类的信息,包括类的成员变量、方法、构造方法等,并可以动态...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的动态性和灵活性。在这个“利用java反射机制的建议计算器源码”中...
### Java反射机制应用详解 #### 一、Java反射机制简介 Java反射机制是Java语言提供的一种能在运行时分析类信息并动态操作对象的功能。通过反射,我们可以在程序运行期间获取类的信息(如类名、方法名等),创建...
自己总结的java反射机制的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者
总结起来,Java反射机制提供了一种强大的工具,让我们可以在运行时动态地操作类和对象,这包括调用方法和访问私有字段。但同时,也需要注意其可能带来的副作用。在上述示例中,我们展示了如何利用反射来实现计算器的...
Java反射机制允许运行中的程序检查自身,并能直接操作程序的内部属性。这是其他许多编程语言(如Pascal、C或C++)不具备的能力。 **1.1 Reflection的工作机制** 为了展示反射如何工作,我们来看一个简单的例子: ...
Java 反射机制详解 ...总结,Java 反射机制是一种强大的工具,能够提升程序的灵活性和可扩展性,但使用时应权衡其性能和安全性的影响。在实际开发中,应该谨慎地使用反射,并尽量将其限制在必要的场景。