Java反射机制与枚举

本文详细介绍了Java的反射机制,包括如何通过反射获取和操作类的属性、方法、构造器,以及如何实例化对象。同时,文章探讨了反射应用于枚举的情况,指出虽然枚举默认继承自Enum类,但由于Java的安全机制,无法通过反射创建枚举对象,揭示了反射在枚举上的限制。
摘要由CSDN通过智能技术生成

Java反射机制与枚举

Java反射机制

我们都知道面向对象的三大特性:继承、封装、多态。而封装就是指用关键字private修饰,用private修饰的属性则认为是私有的,外界不可访问的,更不用说修改某些私有属性了,但是私有就很安全吗?
no,反射可以搞定它,反射可以根据对应类的字节码生成一个Class类的一个实例化对象,通过这个实例化对象调用Class类中的一些封装好的方法就可以实现运行时期的对象创建、运行时的方法调用、运行时的属性获取、运行时的属性修改。
为什么是运行时的操作呢?
因为要知道运行的时候是将字节码加载到JVM中,在类加载中有一步是加载,这一步做的就是由对应的字节码文件加载一个Class对象,而我们反射机制其实和加载时的操作基本相同,所以将这些操作叫做运行时的操作。
那么到底什么是反射?
其实就和表面意思差不多,利用字节码映射出一个Java.lang.Class类的一个实例化对象,同过这个对象中的封装好的方法反射出对应类中的属性、方法、构造方法等等,进而进行一系列操作。
那么在java中反射的具体实现是怎样的呢?
为了演示,我先创建了一个Student类

class Student{
   
    private int id;
    private String name;
    public Student(){
   }
    private Student(int id,String name){
   
        this.id=id;
        this.name=name;
    }
    private void show(){
   
        System.out.println("学号"+this.id+"姓名"+this.name);
    }
}

获得Class对象(三种方式)

//创建class对象
        Student stu=new Student();
        Class<?>sc=stu.getClass();//第一种创建class对象的方法
        Class<?>sc2=Student.class;//第二种创建方式
        Class<?>sec3=Class.forName("Student");//第三种创建方式,参数为对应类的全限定名

获取构造方法(四种方式)constructor
注意:对于获取单个构造方法来说,getConstructor()或getDeclaredConstructor()的参数根据对应类的构造方法的参数格式进行传参,获取哪个构造方法就要传入对应构造方法的参数类型的Class对象,例如int对应的就是int.class。

Constructor<?>constructor=sc.getConstructor()
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值