Java反射

反射

允许程序在运行时来进行自我检查并且对内部的成员进行操作
反射主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关语义

反射机制的作用

  1. 在运行时判断任意一个对象所属的类
  2. 在运行时获取类的对象
  3. 在运行时访问java对象的属性,方法,构造方法等

java.lang.reflect类库里主要的类

  1. Field:表示类中的成员变量
  2. Method:表示类中的方法
  3. Constructor:表示类中的构造方法
  4. Array:该类提供了动态创建数组和访问数组元素的静态方法

反射依赖的Class

用来表示运行时类型信息的对应类

  1. 每个类都有唯一一个与之相对应的Class对象
  2. Class类作为类类型,而Class为类类型对象

Class类的特点

  1. Class类也是类的一种,class则是一种关键字
  2. Class类只有一个私有的构造函数,只有JVM能够创建Class类的实例
  3. JVM中只有唯一一个和类相对应的Class对象来描述其类型信息

获取Class对象的三种方式

  1. Object ——> getClass()
  2. 任何数据类型(包括基本数据类型)都一个‘静态’的class属性
  3. 通过Class类的静态方法:forName(String className)(常用)

代码展示

public static void main(String[] args) throws ClassNotFoundException {
        ReflectTarget reflectTarget = new ReflectTarget();

        //第一种方式获取Class对象
        Class reflectTargetClass1 = reflectTarget.getClass();
        System.out.println("first:"+reflectTargetClass1.getName());

        //第二种方式获取对象
        Class reflectTargetClass2 = ReflectTarget.class;
        System.out.println("second:"+reflectTargetClass2.getName());

        //第三种方式获取对象
        Class reflectTargetClass3 = Class.forName("com.geek.demo.reflect.ReflectTarget");
        System.out.println("third:"+reflectTargetClass3.getName());
        //判断三种方式获取的对象是不是同一个
        System.out.println(reflectTargetClass1 == reflectTargetClass2);
        System.out.println(reflectTargetClass1 == reflectTargetClass3);
        System.out.println(reflectTargetClass2 == reflectTargetClass3);
    }

运行结果

first:com.geek.demo.reflect.ReflectTarget
second:com.geek.demo.reflect.ReflectTarget
third:com.geek.demo.reflect.ReflectTarget
true
true
true

在运行期间,一个类,只有一个与之相对应的Class对象产生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值