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

JAVA 反射机制剖析

2014-09-22 11:34 351 查看
一、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文档实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: