首页 > 其他分享 >十二、类加载器和反射

十二、类加载器和反射

时间:2023-11-10 20:34:00浏览次数:40  
标签:反射 初始化 对象 Object 十二 获取 Class 加载

一、类的加载

类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。

加载 :就是指将class文件读入内存,并为之创建一个Class对象。 任何类被使用时系统都会建立一个Class对象。

连接 :验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用

初始化: 就是我们以前讲过的初始化步骤

1、类的初始化时机

创建类的实例

访问类的静态变量,或者为静态变量赋值

调用类的静态方法 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象

初始化某个类的子类

直接使用java.exe命令来运行某个主类

2、类加载器

概述:负责将.class文件加载到内存中,并为之生成对应的Class对象。 虽然我们不需要关心类加载机制,但是了解这个机制我们就能更好的理解程序的运行

组成:    Bootstrap ClassLoader 根类加载器   (也被称为引导类加载器,负责Java核心类的加载 比如System,String等。在JDK中JRE的lib目录下rt.jar文件中)

    Extension ClassLoader 扩展类加载器  (负责JRE的扩展目录中jar包的加载。 在JDK中JRE的lib目录下ext目录)

    Sysetm ClassLoader 系统类加载器   (负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径)

 

二、反射

概述:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制

1、获取字节码文件对象

要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

对象.getClass()

类名.class

Class.forName(...)

 

2、获取成员

①获取构造方法 Constructor:

          获取单个:getConstructor、getDeclaredConstructor

          获取所有:getConstructors、getDeclaredConstructors

②获取成员变量 Field:

         获取单个:getField、getDeclaredField

         获取所有:getFields、getDeclaredFields

修改成员的值 set(Object obj,Object value)

③、获取成员方法 Method:

          获取单个:getMethod、getDeclaredMethod

          获取所有:getMethods、getDeclaredMethods

3、使用成员

①使用构造方法创建对象:newInstance(Object... initargs)

②使用成员变量并对某一对象的该成员变量赋值:void set(Object obj, Object value)

③使用成员方法并调用某一对象的该成员方法:Object invoke(Object obj, Object... args)

 

4、暴力访问

绕过权限校验暴力访问 method.setAccessible(true);

 

 

 

 

 

 

    

标签:反射,初始化,对象,Object,十二,获取,Class,加载
From: https://www.cnblogs.com/SIKE231310/p/17824977.html

相关文章

  • 基于 three.js 加载器分别加载模型
    点击查看代码/***参数:模型文件路径,成功回调函数**基于three.js加载器分别加载模型**全部加载后通过回调函数传出打印*/import{FBXLoader}from'three/examples/jsm/loaders/FBXLoader.js'import{GLTFLoader}from'three/examples/jsm/loaders/GLTF......
  • Vue中网络图片懒加载工具
    在滑动列表视图中如果有网络图片需要加载直接给imag标签赋值src,会造成没有显示的item中图片也直接加载,势必浪费网络资源。创建一个插件,让列表中的item出显的时候在加载图片从而减少网络请求。具体方法就是给img标签添加一个新的属性暂时先保存对应的url,当item滑动出现到一定值时......
  • 修改Web网页中资源加载的优先级
    在Chrome浏览器中,网络请求的优先级分成了5个等级:Highest最高,如页面HTML资源和CSS文件;High高,如正文图片请求资源;Medium中等,如页面的业务JavaScript文件请求;Low低,如内联的Base64资源,异步加载的JavaScript文件请求;Lowest最低,如发送的统计请求;调整preload预加载默认的优......
  • (四)Spring源码解析:bean的加载流程解析
    一、概述在前几讲中,我们着重的分析了Spring对xml配置文件的解析和注册过程。那么,本节内容,将会试图分析一下bean的加载过程。具体代码,如下图所示:1.1>doGetBean(...)针对bean的创建和加载,我们可以看出来逻辑都是在doGetBean(...)这个方法中的,所以,如下就是针对于这个方法的整体源码注......
  • IIS HTTP 500 - 内部服务器错误完美解决 IIS 服务器无法加载应用程序 '/LM/W3SVC/1/RO
    现象:       浏览ASP页面提示  500内部错误事件查看器中:        [1]:               服务器无法加载应用程序'/LM/W3SVC/1/ROOT'。错误是'没有注册类别'。                有关此消息的详细信息,请访问Microsoft联机支......
  • 个人UI组件库如何适配各种模块规范以及支持按需加载组件和发布包到包管理市场公网或者
    相关代码地址:https://github.com/13476075014/lcc-ui从指令上去看具体实现逻辑yarninitLibsJs用指令把所有组件都让入一个js文件对外暴露,作为umd规范的入口文件yarnbuild:umdjs用webpack输出上面文件,作为umd规范的yarninitEsmsJs用指令把所有组件都让入一个js文件......
  • Android并发编程高级面试题汇总(含详细解析 十二)
    Android并发编程高级面试题汇总最全最细面试题讲解持续更新中......
  • JavaSE(十二)-Object类
    文章目录1.Object类2.Object类常用方法2.1.equals方法3.==和equals的区别3.1.==3.2.equals()方法的使用4.toString方法5.hashCode()方法1.Object类在JDK中提供一个Object类,它是类层次结构的根类,每个类都直接或间接基础自该类,所有对象(包括数组)都实现了这个类的方法。如果......
  • TH系列PCI接口反射内存定购信息
    TH系列PCI接口反射内存定购信息TH-PCI-110     128MB内存   多模光纤TH-PCI-111     128MB内存   单模光纤TH-PCI-210     256MB内存   多模光纤TH-PCI-211     256MB内存   单模光纤TH系列PMC接口反射内存定购信息TH-PMC-110   128MB......
  • DataGridView循环刷新、导出为xlsx文件,加载保存json配置文件
    Winform中的DataGridView控件DataSource属性绑定到数据库,实现循环更新,并且可导出xsxl文件、暂停等功能。注:使用第三方库有EPPlus(操作Eecel)、Newtonsoft.net(Json序列化/反序列化)、Guna2(控件库)winform布局如下:创建LoadConFigJson方法:启动应用程序时,加载读取配置文件 ......