Java反射

反射定义

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

反射的作用

  • 运行时分析类
  • 运行时查看对象
  • 编写泛型数组代码
  • 利用Method对象的invoke方法调用任意方法
    • Method对象是你想要的调用的方法的对象
    • invoke方法调用包装在当前Method对象中的方法

反射相关类

Class

  • 所有反射 API 的入口点

  • 保存类的所有信息

  • 没有 public 类型的构造器。

  • 每个类都有一个 Class 类型的对象,当类被加载时,由 Java 虚拟机调用类加载器的 defineClass 方法构造

  • 一个 Class 对象实际上表示的是一个类型,而这个类型不一定是类,比如 int 等基本类型不是类,但是 int.class 是一个 Class 类型的对象

获取 Class类对象的三种方法

1、 对象名.getClass()

2、Class.forName(className):调用 Class 类的 forName 静态方法

3、T.class:T 是任意的 Java 类型或 void 关键字

Class类常用方法

  • getName():返回类的全限定名

  • 静态方法 forName(className):获取类名对应的 Class 对象

    • className 必须是类名或者接口名,而且必须是全限定名
  • newInstance():创建一个类的实例,调用的是无参构造函数,如果没有无参构造,会抛异常

  • getFieldsgetMethodsgetConstructors:返回类的 publis 域,方法和构造器数组,包括父类的

  • getDeclareFieldsgetDeclareMethodsgetDeclareConstructors:返回类的全部域,方法和构造器数组,但是不包括父类的

FieldMethodConstructor

查看对象域的关键方法是 Field类的各种 get 方法

设置域的值是Field类各种 set 方法,最常用的是set(obj, value)

几个共有的方法:

getName() 方法:返回项目的名称

getModifier():返回一个整数值,代表不同的修饰符,结合Modifier类的静态方法isPublic等可以判断修饰符类型

setAccessible():只需在括号里给个 true,就可以为所以为,想拿到哪个属性就拿哪个

Modifier

有检测各种修饰符的方法,如isPublic

使用反射编写泛型数组代码(扩展任意类型的数组)

1、获取数组的类对象

2、确认它是个数组

3、确定数组类型和长度

4、复制数组

public static Object goodArrayCopyOf(Object a, int newLength){
    Class cl = a.getClass();
    if(!cl.isArray())  return null;
    Class componentType = cl.getComponentType();
    int length = Array.getLength(a);
    Object newArray = Array.newInstance(componentType, newLength);
    System.arraycopy(a, 0, newArray, 0, Math.min(length, newLength));
    return newArray;
}

参考文献

Java核心技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值