java反射机制

来源:互联网 发布:购买已经备案的域名 编辑:程序博客网 时间:2024/05/18 03:20

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

反射机制的优点与缺点  
        为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念,   静态编译:在编译时确定类型,绑定对象,即通过。  动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的藕合性。一句话,反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵性。

它的缺点是对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。

应用反射的基本步骤: 

 1、获得你想操作的类的Class对象;      

方法一:Class c=Class.forName("java.lang.String")      

方法二:对于基本数据类型可以用形如Class c=int.class或Class c=Integer.TYPE的语句      

方法三:Class c=MyClass.class

 2、调用Class中的方法得到你想得到的信息集合,如调用getDeclaredFields()方法得到类的所有属性;   

3、处理第2步中得到的信息,然后进行你想做的实际操作。

反射举例:通过反射机制得到某个类的构造器,然后调用该构造器创建该类的一个实例

import java.lang.reflect.*; 

 public class ConstructorDemo{    

public ConstructorDemo(){ }    

public ConstructorDemo(int a, int b){       

 System.out.println("a="+a+"b="+b);    

}    

public static void main(String args[]){        

try {            

Class cls = Class.forName("ConstructorDemo");            

 Class partypes[] = new Class[2]; partypes[0] = Integer.TYPE;              

partypes[1] = Integer.TYPE;            

Constructor ct= cls.getConstructor(partypes);            

Object arglist[] = new Object[2];            

arglist[0] = new Integer(37);            

arglist[1] = new Integer(47);            

Object retobj = ct.newInstance(arglist);         

 } 

catch (Throwable e) { 

            System.err.println(e); 

}          

}    

}

0 0
原创粉丝点击