码迷,mamicode.com
首页 > 其他好文 > 详细

2015-08-12~14 反射

时间:2015-08-17 11:56:31      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

反射:

若程序运行时接收到外部传入的一个对象,该对象的编译类型是Object,但程序又需要调用该对象运行类型的方法:

              1.若编译和运行类型都知道,使用 instanceof判断后,强转。

              2.编译时根本无法预知该对象的类属于哪些类,程序只能依靠运行时信息来发现对象和类的真实信息,这是反射就必须使用了。

              3.要是想通过对象来找其对应的类名,就得使用反射。

 

Class类和Class类实例

  • Class类代表Java类,它的各个实例对象分别对应各个类在内存中的字节码。
  • 类被类加载器加载到内存中,占用一片存储空间,内容就是类的字节码,类不同字节码也不同。
  • 一个类在虚拟机中通常只有一份字节码。

获得Class对象

类被加载后,系统会为该类生成对应的Class对象,通过Class对象可以访问到JVM中的这个类,3种方式:

  • 使用Class类的forName(String n)静态方法,n表示类全名;包名.子包名....类名
  • 调用某个类的class属性获取Class对象,如Date.class会返回Date类对应的Class对象(其实就是得到一个类的一份字节码文件);
  • 调用某个对象的getClass()方法。该方法属于Object类;
    • Class<Date> clz = new Date().getClass();

 

Class类中boolean isPrimitive() :判定 Class 对象是否表示一个基本类型。(8个基本数据类型+void)

 

  包装类和Void类的静态TYPE属性: Integer.TYPE == int.class ;

  数组类型的Class实例对象:Class<String[]> clz = String[].class;

  boolean isArray() :判定此 Class 对象是否表示一个数组类。

 

从Class中获取信息

  -构造方法Constructor

    Constructor<T> getConstructor(Class<?>... parameterTypes)

      返回该Class对象表示类的指定的public构造方法。

    Constructor<?>[] getConstructors()

      返回该Class对象表示类的所有public构造方法。

  -方法Method

    Method getMethod(String name, Class<?>... parameterTypes)

      返回该Class对象表示类和其父类的指定的public方法。

    Method[] getMethods(): 

      返回该Class对象表示类和其父类的所有public方法。

  -字段Field

    Field getField(String name)

      返回该Class对象表示类和其父类的指定的public属性。 

    Field[] getFields()

      返回该Class对象表示类和其父类的所有public属性。

 

2015-08-12~14 反射

标签:

原文地址:http://www.cnblogs.com/xiedz/p/4729931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!