Java 反射

Class

 

            Java 程序汇总的各个 Java 类属于同一类事物,描述这类事物的 Java 类名就是 Class。Class 表示在内存中存储的字节码。

 

           (1)获取字节码的三种方式:

                                          1 、类名.class。 例如:System.class;

                                          2 、对象.getClass()。例如:new Date().getClass();

                                          3、Class.forName("类名")。例如:Class.forName("java.util.Date");


           (2)九个预定义 Class 实例对象:

 

                                                     boolean、byte、char、short、int、long、float、double、void

 

 

反射

 

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

 

 

Constructor 类

 

          一个 Constroctor 类代表一个字节码中的一个构造方法。

 

           (1)得到一个类中的所有构造方法。例如:Constroctor[] constroctors = Class.forName("java.lang.String").getConstroctors();

 

           (2)得到一个类中的某一个构造方法。例如:Constroctor constroctor = Class.forName("java.lang.String").getConstroctor(StringBuffer.class);

 

            编程实例:用反射的方式创建一个类的实例对象

 

           

 

 

Field 类

 

 

              Field 类代表某个类中的一个成员变量。因为 Field 是对应到对象上面的成员变量,所以 Field 代表的成员变量是具体的,不是抽象的,一个类的字节码对应着一个类的成员变量。

 

              编程实例: 用反射的方式获取一个类中的成员变量,并修改变量的值

 

          

 

           运行结果:

 

           原名:DriverKing
           改后:DriverKing_斌

 

           编程实例:将任意一个对象中的所有 String 类型的成员变量所对应的字符串内容中的 “b” 改为 “a”

 

          

 

           运行结果:

 

           black,hubei,basketball,23
           alack,huaei,aasketaall,23

 

 

 Method 类

 

         Method 类代表某个类中的一个成员方法。

 

          (1)得到类中的某一个方法。例如:Method charAt = Class.forName("java.lang.String").getMethod("charAt",int.class);

 

          (2)调用方法。例:System.out.println(charAt.invoke(str,2));  // 普通方式调用: System.out.println(str.charAt(2));

 

           编程实例:用反射的方式调用某个类的方法

 

          

 

          (3)用反射的方式执行某个类的 main 方法

 

          

 

          (4)对数组的反射

 

                 具有相同维数和元素类型的数组属于同一个类型,即代表有相同的 Class 实例对象。相同的维数,例如:二维数组就是数组的数组,也就是说数组里面存放的是引用类型的对象,它的字节码就不相同。所以 具有相同维数和元素类型的数组才是属于同一个类型。如果想获得一个数组的类型用:Class 实例对象的 getSuperClass()

 

          编程实例:用反射的方法打印数组

 

         

 

 

         (5)对集合的反射

 

          编程实例:利用配置文件指定集合的类型,然后再用反射创建集合并打印集合

 

          

 

 

        (6)用类加载器加载配置文件

 

          

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值