首页 > 其他分享 >反射的原理

反射的原理

时间:2024-08-07 20:16:46浏览次数:16  
标签:反射 Java 对象 原理 方法 Class 加载

反射的原理

类加载器(ClassLoader):
类加载器负责读取.class文件,并将它们加载到Java虚拟机(JVM)中。每个Java程序至少使用三个类加载器:启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和系统类加载器(System ClassLoader)。

类对象(Class Object):
每个加载到JVM中的类都有一个对应的java.lang.Class对象。这个对象包含了类的元数据,如类的名称、字段、方法、构造函数等。

反射 API:
Java 反射 API 提供了一系列的类和接口来操作Class对象。主要的类包括:

  • Class:代表类和接口的静态类型信息。
  • Field:代表类的成员变量。
  • Method:代表类的方法。
  • Constructor:代表类的构造函数。
  • Array:提供动态创建和访问Java数组。

获取 Class 对象:
可以通过多种方式获取一个类的Class对象:

  • 直接使用类字面量:Class<?> clazz = MyClass.class;
  • 通过实例对象的getClass()方法:MyClass obj = new MyClass(); Class<?> clazz = obj.getClass();
  • 使用类加载器的loadClass()方法。

访问类成员:
一旦有了Class对象,就可以使用反射 API 访问类的成员,如字段、方法和构造函数。这包括:

  • 获取成员列表:Class对象的getFields()getMethods()getConstructors()方法。
  • 访问特定成员:getDeclaredField()getDeclaredMethod()getDeclaredConstructors()方法,这些方法可以访问包括私有成员在内的所有成员。

修改访问控制**:
使用FieldMethodConstructor对象的setAccessible(true)方法可以修改Java语言的访问控制,允许反射访问私有成员。

创建和操作对象**:
使用Class对象的newInstance()方法可以创建类的实例。对于没有无参构造函数的类,可以使用Constructor对象的newInstance()方法。

调用方法和访问字段**:
使用Method对象的invoke()方法可以在对象上调用方法。使用Field对象的get()set()方法可以读取和修改字段的值。

泛型和数组的特殊处理**:
由于Java的类型擦除,泛型信息在运行时不可用。数组的处理稍有不同,因为数组是固定类型的。

异常处理**:
反射操作可能会抛出多种异常,如ClassNotFoundExceptionIllegalAccessExceptionInstantiationExceptionNoSuchFieldExceptionNoSuchMethodException等。

标签:反射,Java,对象,原理,方法,Class,加载
From: https://www.cnblogs.com/luoyiwen123/p/18347836

相关文章

  • 博客摘录「 MD5原理」2024年8月3日
    ,MD5消息摘要算法(英语:MD5Message-DigestAlgorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16个字符(BYTES))的散列值(hashvalue),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(RonaldLinnRivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在......
  • 如何使用反射
    如何使用反射通过Class对象的newInstance()方法packagecom.lut.study_java_demo1;​importjava.util.Scanner;​/***@authorZhou*@desc反射的使用*@date2024/8/716:13*/publicclass_21_new_reflect{  publicstaticvoidmain(String[]args)throws......
  • spring原理(第十一天)
    从@Aspect到Advisor代理创建器准备好两种切面staticclassTarget1{publicvoidfoo(){System.out.println("target1foo");}}staticclassTarget2{publicvoidbar(){System.out.println("tar......
  • 反射
    反射1.类加载机制Java中的类加载机制是Java运行时的核心组成部分,它负责在程序运行过程中动态加载和连接类文件,并将其转换为可执行代码。这一机制遵循“按需加载”的原则,即只有在需要用到某个类的时候,才会将这个类的相关信息加载到内存中。1.1.类的生命周期Java中的类从被加载......
  • 反射
    反射1.理解Class类–对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE都为其保留一个不变的Class类型的对象。一个Class对象包含了特定某个类的有关信息。–Class对象只能由系统建立对象–一个......
  • 激光点云去畸变_原理及实现
    激光点云去畸变:原理及实现机械式激光雷达产生畸变的原因Lidar扫描周期内(一般0.1s)自车有一定幅度的旋转(Rotation)和平移(Translation),因此不同时间点打出去的激光点束并不在严格统一的Lidar坐标系内,需要对同一帧Lidar转化在统一时间戳对应的Lidar坐标系上(一般转化到第......
  • 2024最新Mysql锁机制与优化实践以及MVCC底层原理剖析
    锁机制详解锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一......
  • 雷达气象学(7)——反射率因子图分析(气象回波篇)
    从本篇文章开始介绍反射率因子图(即雷达回波强度图)的分析与识别方法。目录7.0雷达回波的分类7.1层状云降水回波7.2积状云降水回波(对流性降水回波)7.3层积混合降水回波7.4零度层亮带7.5晴空回波7.0雷达回波的分类雷达回波可分为气象回波和非气象回波:\[雷达回波\begin{cas......
  • 基于CAT计算出的VBM(四)指标与临床量表相关的原理与技术
    前言  前面学习了神经科学中常见的两步分析法:ttest2识别差异:双样本T检验用于在全脑范围内识别疾病组和对照组存在灰质体积差异的脑区团块,定义为ROI。corrROI和临床量表相关分析:进一步,针对疾病组的被试在差异脑区上的灰质体积和临床量表进行相关性分析,针对性的探索该ROI的......
  • Type-C协议(CC检测原理)-CC1和CC2接电阻-数字和模拟耳机兼容
    1简介USBType-C其实是USB的一种接口形态,USB的接口形态可以分为USBType-A、USBType-B、USBType-C,USBType-A和USBType-B还有两种不同规格的接口形态,分别是USBMini-A(B)和USBMicro-A(B)。USB各型号接口图解越来越多的手机开始采用Type-C作为充电和通信端口,Type-C连接器......