反射

本文详细介绍了Java反射机制,包括获取类字节码文件的三种方式,如何通过反射创建对象,访问私有构造方法,操作成员变量以及调用成员方法。通过案例演示了如何利用反射在ArrayList中添加元素。
摘要由CSDN通过智能技术生成

反射

反射机制:

当一个类被加载进内存后,都会相应的有一个字节码文件(里面有类的信息)对象,我们去剖析这个类的的构成,还能调用该类中的功能,想要通过反射去调用类中的功能和属性,那必须先要得到,该类对应的字节码文件对象(Class)

获取换一个类的字节码文件对象的三种方式:

方式1:

通过Object类中的 getClass();

Student student = new Student();
Class aClass = student.getClass();
方式2:

每个类都有一个class 静态属性

 Class studentClass = Student.class;
方式3:

通过 Class 类中的一个静态方法来获取
static Class<?> forName (String className) 返回与带有给定字符串名的类或接口相关联的 Class 对象。通过一个类的全路径,就可以获取到该类的字节码文件对象
类的全路径: 该类带有包名的写法 例如: org.westos.demo2.Student 一个类全路径的写法

Class<?> aClass3 = Class.forName("org.westos.demo2.Student");
    System.out.println(aClass3== studentClass);
随便建一个学生类
public class Student {
}
测试类
public class MyDemo {
public static void main(String[] args) throws Exception {
    //方式1:通过Object类中的 getClass()
    Student student = new Student();
    Class aClass = student.getClass();
    Class aClass1 = student.getClass();
    System.out.println(aClass);
    System.out.println(aClass==aClass1);

    Student student2 = new Student();
    Class aClass2 = student2.getClass();
    System.out.println(aClass1==aClass2);

    //方式2,每个类都有一个class 静态属性
    Class studentClass = Student.class;
    System.out.println(studentClass==aClass);

    //方式3:通过 Class 类中的一个静态方法来获取
    Class<?> aClass3 = Class.forName("org.westos.demo2.Student");
    System.out.println(aClass3== studentClass);
}
}

类的构成:

成员方法,Method
构造方法 Constructor
成员变量 Field

使用反射剖析一个类

我们要使用反射去剖析一个类,必须先获取到该类所对应的字节码文件对象;
1.获取该类的字节码文件对象

Class clazz = Class.forName("org.westos.demo3.Student");

2.研究构造方法 那我们就得得到构造方法的对象

//A:
    //获取所有构造方法
    //public Constructor<?>[] getConstructors () 获取所有的构造方法不包含私有的
    //public Constructor<?>[] getDeclaredConstructors () 获取所有的构造方法 包括私有的
    //B:
    //获取单个构造方法
    //public Constructor<T>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值