JAVA 反射机制剖析

一、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文档实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值