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

JAVA 反射机制剖析

2014-04-20 01:10 232 查看
一、Class、Object 类的理解
Object类位于在java.lang包中,此包在使用时无需显式导入,编译时由编译器自动导入;Object类默认为所有类的父类即所有的java类都继承了Object拥有的方法,其中一个与JAVA反射机制有关的方法是getClass(),此方法返回当前对象的运行时类,然后通过使用此类实现反射的其它功能。
Class类表示正在运行应用程序中的类和接口;Class没有public的构造方法所以只能由java虚拟机或者调用类加载器的defineClass方法生成Class对象;通过生成的Class对象完成其它反射功能。

二、反射的理解及可完成的工作
java语言不支持在程序运行时改变程序结构或者变量的值,但它提供了一种机制可使正在运行的java对象得到其类定义方法、变量并可通过此机制动态的添加及执行发放的机制,这种机制我们称之为java的反射机制。
java的反射机制具体来说可实现以下4种功能:
1、根据运行对象得到完整类名
2、得到运行对象类的方法包括构造方法
3、得到类生成对象
4、得到类定义的公用变量
三、反射的具体使用方法
1、得到运行对象类的Class实例。
可通过以下多种方式获取Class实例

a)、在运行时对象中可通过调用超类方法getClass()得到Class实例,如下:
String str = "";

Class c1 = str.getClass;

b)、通过Class类的静态方法forName("");
Class c1 = Class.forName ("java.lang.String");
c)、 通过包装类的TYPE属性
Class c1 = Integer.TYPE;
2、获取类的构造方法并构造一个新对象 执行某个方法
public class Test {
public static void main(String [] args) throws ClassNotFoundException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException{
Class c = Class.forName("t");
Constructor[] con = c.getConstructors();
Class<?>[] type = con[1].getParameterTypes();
Object obj = c.getConstructor(type).newInstance("zhang");
obj.getClass().getMethod("m2").invoke(obj);

}
}

class t{
String s = "";
public t(){
System.out.println("t()");
}
public t(String sr){
this.s = sr;
}
public void m1(){
System.out.println("m1()");
}
public void m2(){
System.out.println(s);
}
}
反射可实现的其他功能可JDK文档实现。

本文出自 “后时代小生” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: