Java——反射

一、反射的概述

      JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
       要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

    (动态获取信息,动态调用对象(Class类型)的方法)

   

二、获取Class对象的三种方法

代码示例:
  1.  * 获取Class对象的三种方式 
  2.  * 1 Object ——> getClass(); 
  3.  * 2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性 
  4.  * 3 通过Class类的静态方法:forName(String  className)(常用) 
  5.  * 
  6.  */  
  7. public class Reflet {  
  8.     public static void main(String[] args) {  
  9.         //第一种方式获取Class对象    
  10.         Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。  
  11.         Class stuClass = stu1.getClass();//获取Class对象  
  12.         System.out.println(stuClass.getName());  
  13.           
  14.         //第二种方式获取Class对象  
  15.         Class stuClass2 = Student.class;  
  16.         System.out.println(stuClass == stuClass2);//判断第一种方式获取的Class对象和第二种方式获取的是否是同一个  
  17.           
  18.         //第三种方式获取Class对象  
  19.         try {  
  20.             Class stuClass3 = Class.forName("Refestpackage.Student");//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名  
  21.             System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象  
  22.         } catch (ClassNotFoundException e) {  
  23.             e.printStackTrace();  
  24.         } 
  25.     }  

三、java反射调用方法的常规使用步骤

反射调用一般分为3个步骤:

  • 得到要调用类的class
  • 得到要调用的类中的方法(Method)
  • 方法调用(invoke)

  代码示例:

  1. Class cls = Class.forName("chb.test.reflect.Student");  
  2. Method m = cls.getDeclaredMethod("hi",new Class[]{int.class,String.class});  //方法名  方法参数的类型
  3. m.invoke(cls.newInstance(),20,"chb"); //通过newInstance来调用无参构造创建对象



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值