zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Integer to Roman leetcode java
    Reverse Integer leetcode java
    Binary Tree Maximum Path Sum leetcode java
    公司来了一个奇葩需求pppoe client+server+EOIP+vlan
    魔兽数据库-自然
    windows默认dns解析走ipv4而不走ipv6
    ROS支持BCP桥接(基于PPP隧道)
    几款比较好用的电动理发器推荐
    centos 拨号pptp在拨号成功和拨号失败的时候脚本处理!!!非常重要
    ros routeros 脚本命令script
  • 原文地址:https://www.cnblogs.com/maxiaoyun/p/4832934.html
Copyright © 2011-2022 走看看