Java反射机制

1、什么是反射机制?

简单说,反射机制值得是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。

 

2、java反射机制提供了什么功能?

在运行时能够判断任意一个对象所属的类

在运行时构造任意一个类的对象

在运行时判断任意一个类所具有的成员变量和方法

在运行时调用任一对象的方法

在运行时创建新类对象

 

3、哪里用到反射机制?

  jdbc中有一行代码:Class.forName('com.mysql.jdbc.Driver.class').newInstance();那个时候只知道生成驱动对象实例,后来才知道,这就是反射,现在很多框架都用到反射机制,hibernate,struts都是用反射机制实现的。

  Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类。类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,在Java使用类型类来表示一个类型。所有的类型类都是Class类的实例。

A a = new A();  
if(a.getClass()==A.class)  
System.out.println("equal");  
else System.out.println("unequal");

 

4、反射机制的优缺点?

  优点:

  可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编译后发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能的更新,而采用反射机制的话,它就可以不用卸载,只需要在运行时才动态的创建和编译,就可以实现该功能。     

  缺点:

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

 

四、利用反射机制能获得什么信息

    在获得类型类之后,你就可以调用其中的一些方法获得类型的信息了,主要的方法有:

  getName():String:获得该类型的全称名称。

  getSuperClass():Class:获得该类型的直接父类,如果该类型没有直接父类,那么返回null。

  getInterfaces():Class[]:获得该类型实现的所有接口。

  isArray():boolean:判断该类型是否是数组。

  isEnum():boolean:判断该类型是否是枚举类型。

  isInterface():boolean:判断该类型是否是接口。

  isPrimitive():boolean:判断该类型是否是基本类型,即是否是int,boolean,double等等。

  isAssignableFrom(Class cls):boolean:判断这个类型是否是类型cls的父(祖先)类或父(祖先)接口。

  getComponentType():Class:如果该类型是一个数组,那么返回该数组的组件类型。

         一句话,类中有什么信息,它就可以获得什么信息,不过前提是得知道类的名字,要不就没有后文了        首先得根据传入的类的全名来创建Class对象。        Class c=Class.forName("className");注明:className必须为全名,也就是得包含包名,比如,cn.netjava.pojo.UserInfo;        Object obj=c.newInstance();//创建对象的实例        OK,有了对象就什么都好办了,想要什么信息就有什么信息了。 

 


引用出:http://blog.csdn.net/snn1410/article/details/44978457
posted @ 2015-09-23 17:40  马小云  阅读(228)  评论(0编辑  收藏  举报