Java 反射机制
前言:之前面试的时候对Java 反射机制不是很了解,所以打算做个笔记好好学习一下。
概念(转自百度百科):
JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。
反射方法有三种:
1、调用Class.ForName(类名) 实现
2、对象的getClass() 方法
3、类的.class 属性
通过反射生成对象的方式有两种:
1、使用Class 对象的newInstance() 方法来创建该对象对应类的实力(这种方式要求该Class对象的对应类有默认构造器)
2、先使用Class对象获取指定的Constructor 对象,再调用Constructor对象的newInstance() 方法来创建该Class 对象对应类的实例(通过这种方式可以选择指定的构造器来创建实例)
使用反射操作对象:
Method Field Constructor 这些类都实现了java.lang.reflect.Member 接口,程序通过Method对象来执行相应的方法, 通过Constructor对象来调用对应的构造器创建实例,通过Field对象直接访问和修改对象的成员变量值。