您的位置:首页 > 编程语言 > Java开发

java 反射 基本知识整理

2013-04-28 15:12 232 查看
1.概念
JAVA反射机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。
                   引自 百度百科

2.JAVA的反射
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法。Java 的这一能力在实际应用中用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。

       Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。这种“看透class”的能力(the ability of the program to examine itself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语。

3.用途
反射的主要作用是用来扩展系统和动态调用程序集。

Reflection 是 Java 被视为动态(或准动态)语言的关键,允许程序于执行期 Reflection APIs 取得任何已知名称之 class 的內部信息,包括 package、type parameters、superclass、implemented interfaces、inner classes, outer class, fields、constructors、methods、modifiers、Annotation(注解),並可于执行期生成instances、变更
fields 內容或唤起 methods。

比较简单的就是 ioc spring用xml做提前加载时 需要写上类全名 例如:xxx.xxxx.xxxx.xxAction 

4.Java类反射中所必须的类

Java的类反射所需要的类并不多,它们分别是:Field、Constructor、Method、Annotation、Class、Object,下面我将对这些类做一个简单的说明。

Field类:提供有关类或接口的属性的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)属性或实例属性,简单的理解可以把它看成一个封装反射类的属性的类。
Constructor类:提供关于类的单个构造方法的信息以及对它的访问权限。这个类和Field类不同,Field类封装了反射类的属性,而Constructor类则封装了反射类的构造方法。
Method类:提供关于类或接口上单独某个方法的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。 这个类不难理解,它是用来封装反射类方法的一个类。
Annotation类:提供关于类中方法属性及类本身上注解的信息。可以提取类、方法、属性上注解,用以在反射中作为判断条件,在新的框架中往往用注解替代xml文件以解决xml文件过大问题,因为注解里有默认值,所以开发是有时会用到约定俗成来减少代码量和便于修改,他用来封装反射类注解的一个类。
Class类:类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。

Object类:每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。  

5.简单实例

构造器:
无参构造器
有参构造器
私有构造器(破单例)

构造器 参考

属性:
公有属性
私有属性
属性反射参考
方法:
公有方法
私有方法
方法反射 简单实例
注解:
注解了解和反射中应用注解
当前类的父类:
反射父类
当前类的接口:
接口的应用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 反射