Java反射简述

Java反射(Reflection)

introspection(内省、内观、反省)

Class类:代表一个类;

Field类:代表类的成员变量;

Method类:代表类的方法;

Constructor类:代表类的构造方法;

Array类:提供了动态创建数组,以及访问数组元素的静态方法;

  • 反射的基本概念
    1. 在运行时判断任意一个对象所属的类;
    2. 在运行时构造任意一个类的对象;
    3. 在运行时判断任意一个类所具有的成员变量和方法;
    4. 在运行时调用任意一个对象的方法;

重点

要想使用反射,首先要或者待处理类或对象所对应的Class对象;

在Java中,无论生成某个类的多少个对象,这些对象都会对应于同一个Class对象;

  • 要想使用反射,第一步首先要获取待操作类的Class对象

    获取Class对象的三种方法:

    1. 类名.Class;
    2. 对象名.getClass();
    3. Class.forName(“要加载类的全路径”);
    4. 如:Class.forName(“Java.lang.String”);
  • 使用反射执行某个类的某个方法,步骤如下:
    1. 先或者这个类的Class对象,如上三种方法任意一种都可以:
Class<?> classType = Class.forName("com.zkcx.reflection.Test");
  1. 通过Class对象的newInstance()方法获取到当前类的实例:
Object test = classType.newInstance();
  1. 获取想要调用方法的Method对象(通过class对象获取Method对象):
Method method = classType.getMethod("方法名", new Class[]{参数的class对象});
Method method = classType.getMethod("add", new Class[]{int.class, int.class});
  1. 通过获取到的Method对象执行方法:
Object object = method.invoke(要执行类的实例(test), new Object[]{需要给方法传递的参数列表});
Object object = method.invoke(test, new Object[]{25, 57});
此object就是add()方法最后输入的结果
  • #### 若想通过类的不带参数的构造方法来生成对象,有两种形式 ####
    1. 先获得Class对象,然后通过该Class对象的newInstance方法直接生成即可:
Class<?> classType = String.class;
Object object = classType.newInstance();
  1. 先获得Class对象,然后通过class对象获得对应的Constructor对象,再通过该Constructor对象的newInstance()方法生成:
Class<?> classType = Test.class;
Constructor constructor = classType.getConstructor(new class[]{});
Object object = cons.newInstance(new Object[]{});
此object就是通过无参的构造方法生成的对象
  • #### 若想通过类的带参数的构造方法来生成对象,只有一种形式 ####
    1. 先获得Class对象,然后通过Class对象获得对应的Constructor对象,再通过该Constructor对象的newInstance()方法生成:
Class<?> classType = Test.class;
Constructor constructor = classType.getConstructor(new class[]{String.class, int.class});
Object object = cons.newInstance(new Object[]{"zhangsan", 78});
  • #### Integer.TYPE返回的是int,而Integer.class返回的是Integer类所对应的Class对象。 ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值