前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 逆向】类加载器 ClassLoader ( 类加载时机 | 隐式加载 | 显示加载 | 类加载步骤 | 装载 | 链接 | 初始化 )

【Android 逆向】类加载器 ClassLoader ( 类加载时机 | 隐式加载 | 显示加载 | 类加载步骤 | 装载 | 链接 | 初始化 )

作者头像
韩曙亮
发布2023-03-30 09:05:34
2.1K0
发布2023-03-30 09:05:34
举报

文章目录

一、类加载时机


1、隐式加载

类加载 的 隐式加载 , 没有明确的说明加载某个类 , 但是进行了如下操作 :

  • 使用 new 关键字 直接 创建类的实例对象 ;
  • 使用 new 关键字 直接 创建类的 子类 实例对象 ;
  • 通过 反射方式 创建 类 / 子类 实例对象 ;
  • 访问 类的 静态变量 , 对静态变量 进行 读 或者 写 操作 都会触发 隐式加载 ;
  • 访问 类的 静态函数 ;

2、显式加载

显式加载 : 明确的说明要加载某个类 ,

  • 使用 Class.forName() 加载指定的类 ;
  • 使用 ClassLoader.loadClass 加载指令的类 ;

二、类加载步骤


参考 【Java 虚拟机原理】Java 类加载过程 ( 加载 | 连接 - 验证 准备 解析 | 初始化 | 使用 | 卸载 ) 博客 ;

类加载步骤 :

  • ① 装载 : 加载某个类时 , 首先要 查找 并 导入 Class 字节码文件 ;
  • ② 链接 : 该阶段 , 可以分为以下
3

个子阶段 ;

  • 验证 : 验证字节码文件是否正确 ;
  • 准备 : 为 静态变量 划分内存空间 , 并进行默认值赋值 ;
  • 解析 : 将 " 常量池 " 中的 " 符号引用 " 转为 " 直接引用 " ;

  • ③ 初始化 : 调用 clinit 函数 , 初始化 静态变量 静态代码块 ;
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、类加载时机
    • 1、隐式加载
      • 2、显式加载
      • 二、类加载步骤
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档