Java反射

一、反射概念

  1. Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期间借助于Reflection API 取得任何类的内部信息,并能直接操作任意对象的内部属性及方法
  2. 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息,我们可以通过这个对象看到类的结构。(这个对象就像是一面镜子,通过这面镜子看到类的结构,我们形象的称之为:反射)

二、Class类

I. 理解Class类

Class是什么?Class这个类封装了什么信息?

  1. Class是一个类,封装了当前对象所对应的类的信息;
  2. 一个类中有属性,方法,构造器等,比如说有一个Person类,一个Boy类,一个Girl类,这些都是不同的类,现在需要一个类,用来描述类,这就是Class,它应该有类名,属性,方法,构造器等。Class是用来描述类的类;
  3. Class类对象是一个类照镜子的结果,对象可以看到自己有哪些属性,方法,构造器,实现了哪些接口等等。

II. 哪些类型可以有Class对象

  1. class(外部类,成员内部类,静态内部类,局部内部类,匿名内部类)
  2. interface:接口
  3. [] :数组
  4. enum :枚举
  5. annotation :注解
  6. primitive type :基本数据类型
  7. void : 空类型

三、反射机制可以提供的功能

  1. 在运行时判断任意一个对象所属的类;
  2. 在运行时构造任意一个类的对象;
  3. 在运行时判断任意一个类所具有的成员变量和方法;
  4. 在运行时获取泛型信息;
  5. 在运行时调用任意一个对象的成员变量和方法;
  6. 在运行时处理注解;
  7. 生成动态代理;

四、获取Class对象的五种方式

  1. 通过类名获取 ------ 类名.class);
@Test
    public void test02(){
        Class<Emp> empClass = Emp.class;
        //class com.lihaozhe.classobject.Emp
        System.out.println(empClass);
        //com.lihaozhe.classobject.Emp
        System.out.println(empClass.getName());
        //Emp
        System.out.println(empClass.getSimpleName());
    }
  1. 通过对象获取 ------ 对象名.getClass();
@Test
    public void test03(){
        Emp emp = new Emp();
        Class<? extends Emp> empClass = emp.getClass();
        //class com.lihaozhe.classobject.Emp
        System.out.println(empClass);
        //com.lihaozhe.classobject.Emp
        System.out.println(empClass.getName());
        //Emp
        System.out.println(empClass.getSimpleName());
    }

结果:

emp中的静态代码块
emp中的构造代码块
Emp中无参构造方法
class com.lihaozhe.classobject.Emp
com.lihaozhe.classobject.Emp
Emp
  1. 通过全类名获取 ------ Class.forName(全类名);

  2. 使用一个类的类加载器加载另外一个类;

  3. 使用包装类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值