A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心在左边跳 中级黑马   /  2015-7-10 14:58  /  752 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.反射的基石-Class类
  • JAVA程序中各个JAVA类属于同一类事物,描述该事物的JAVA类名就是Class对比,众多的人用Person表示,众多的JAVA类用Class类表示
    Person类表示人,实例对象张三李四具体的人。Class类代表JAVA类,实例对象对应各个类子内存中的字节码,例如:Person类的字节码,ArrayList类的字节码。一个类被类加载器加载到内存中,占用一片存储空间,这个空间内容就是类的字节码,不同的类字节码不同,不同的类在空间内容不同,这一个个空间可以用一个个对象来表示,这些对象有相同的类型。
    Class类描述了哪些信息?
    -类名,类访问属性,类所属的包名,字段名称的列表,方法名称的列表。

  • 如何得到字节码对应的实例对象(Class类型)
    • 类名.class,例如System.class
    • 对象.getClass().例如new Date.getClass
    • Class.forName("类名")例如,Class.forName("java.util.date")反射中主要使用这种
  • 九个预定义Class实例对象
    • Int.class=Integer.Type(参考Class.isPrimitive方法的帮助)八个基本类型加void.class
  • 数组类型Class实例对象
    • int[].class.isArray()
  • 总之,只要在源程序出现的类型,都有各自的Class实例对象,例如int[],void
  1. public class ClassDemo {
  2.     public static void main(String[] args) throws ClassNotFoundException {
  3.         //返回字节码。如果字节码已经被加载,直接返回,如果没加载,用类加载器加载,然后返回
  4.         Class.forName("java.lang.String");
  5.         String str="abc";
  6.         Class cls1=str.getClass();
  7.         Class cls2=String.class;
  8.         Class cls3=Class.forName("java.lang.String");
  9.         //Class对象相同
  10.         System.out.println(cls1==cls2);//true
  11.         System.out.println(cls2==cls3);//true
  12.         System.out.println(cls1.isPrimitive());//false
  13.         //指定的 Class 对象是一个基本类型
  14.         System.out.println(int.class.isPrimitive());//true
  15.         //不同的Class对象,不同字节空间
  16.         System.out.println(int.class==Integer.class);//false
  17.         //Integer.TYPE表示它所包装的基本类型
  18.         System.out.println(int.class==Integer.TYPE);//true
  19.         //int[]是数组类型
  20.         System.out.println(int[].class.isPrimitive());//false
  21.         System.out.println(int[].class.isArray());//true
  22.     }
  23. }
复制代码
2.理解反射的概念

反射就是把类类各种成分映射成相应的JAVA类,例如,一个JAVA类中用一个Class类的对象表示,一个类的组成部分:成员变量,方法,构造方法,包等信息也用JAVA表示。表示JAVA类的Class类显然提供了一系列的方法,获取其中的变量,方法,构造方法,修饰符,包等信息。这些信息就是用响应类的实例对象表示。他们是Field,Method,Contructor,Package等
一个类中的,每个成员都可以用相应的反射API类的一个实例对象表示。调用Class类对象可以得到这些成员的实例对象。




2 个回复

倒序浏览
学习了  谢谢
回复 使用道具 举报
这个得认真看哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马