首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

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

文章目录 一、类加载时机 1、隐式加载 2、显式加载 二、类加载步骤 一、类加载时机 ---- 1、隐式加载加载 的 隐式加载 , 没有明确的说明加载某个类 , 但是进行了如下操作 : 使用 new...创建类的实例对象 ; 使用 new 关键字 直接 创建类的 子类 实例对象 ; 通过 反射方式 创建 类 / 子类 实例对象 ; 访问 类的 静态变量 , 对静态变量 进行 读 或者 写 操作 都会触发 隐式加载...; 访问 类的 静态函数 ; 2、显式加载 显式加载 : 明确的说明要加载某个类 , 使用 Class.forName() 加载指定的类 ; 使用 ClassLoader.loadClass 加载指令的类...; 二、类加载步骤 ---- 参考 【Java 虚拟机原理】Java 类加载过程 ( 加载 | 连接 - 验证 准备 解析 | 初始化 | 使用 | 卸载 ) 博客 ; 类加载步骤 : ① 装载 :...划分内存空间 , 并进行默认值赋值 ; 解析 : 将 " 常量池 " 中的 " 符号引用 " 转为 " 直接引用 " ; ③ 初始化 : 调用 clinit 函数 , 初始化 静态变量 静态代码块 ;

2.1K30

Spring 中如何控制对象的初始化时间(延迟加载,强制先行加载

Spring 中如何控制对象的初始化时间(延迟加载,强制先行加载) @Lazy 注解 @Lazy 注解,延迟初始化,可以让对象仅在首次使用的时候初始化。...只有当首次使用 User 类的时候,才会被初始化。 @DependsOn 注解 @DependsOn 注解,可以强制先初始化某些类,用于控制类的初始化顺序。...."); } } 为了让 User 初始化的时候,Company 实例已经初始化,即 Company 实例先于 User 实例初始化,那么需要在 User 类上标注@DependsOn 注解。...DependsOn 注解中的参数,就是需要预先初始化的实例名(company)。默认的 Component 标注的类,默认的实例名就是小写开头的类名。

3.4K20

全面解析JVM加载初始化的时机

JVM类加载过程 JVM类加载过程分为几个阶段,分别是加载、验证、准备、解析和初始化。...加载是把二进制字节码载入内存,验证是校验字节流中包含的信息是否符合当要求,准备是为静态变量分配内存并设置静态变量初始值,解析是把常量池内的符号引用替换为直接引用,初始化是执行所有静态变量的赋值动作和静态语句块中的语句...更多详尽分析请阅读之前的文章《JVM的类加载机制全面解析》,这里不再赘述了。 类初始化的时机 对于我们开发人员,我认为应该具体了解一下初始化阶段什么时候在开始。...使用java.lang.reflect包中的方法对类进行反射调用的时候,如果类没有被初始化过,就需要先进行初始化。 当初始化一个类的时候,如果发现它的父类还没有被初始化过,就需要先初始化它的父类。...接口初始化的时机,基本和之前提到的类的5种情况基本一致,唯一不一样的是第3种情况:在一个类被初始化时,它的父类也必须被初始化,但是一个接口被初始化时,它的父接口并不要求被初始化

27610

JavaWeb中web.xml初始化加载顺序

需求说明 做项目时,为了省事,起初把初始化的配置都放在每个类中 static加载初始化配置一多,就想把它给整理一下,这里使用servlet中的init方法初始化。...一定要放在filter的后面 容器加载servlet,加载顺序按照 Load-on-startup 来执行 完整加载顺序:ServletContext -> context-param -> listener...web应用启动后立即加载,其中load-on-startup的值越小,表示加载的优先级越高,如果两个servlet的load-on-startup值相同,则其加载优先级有容器决定; load-on-startup...未配置时,则该servlet的加载由容器决定; 配置load-on-startup后,servlet在startup后立即加载,但只是调用servlet的init()方法,用以初始化该servlet相关的资源...)先初始化初始化成功后,再响应请求。

65380

深入理解Java类加载机制-初始化

加载的最后一个阶段是初始化阶段,初始化阶段从代码层面上看是真正执行源码的阶段。...初始化阶段主要是执行类构造方法,并不是由用户编写代码生成,而是编译器在编译源码过程中自动收集类中的类变量和static代码块生成,编译器收集的顺序由类变量和static代码块在源文件中定义的顺序决定。...接口的与类的方法也略为不同,接口的不会主动触发父接口的方法,除非该接口有使用到父接口的变量,父接口才会初始化。...同一个类加载器下,一个类只会被初始化一次。 本期类加载初始化阶段就介绍到这,下期我们会讲解前面多次提及过的类加载器,我们下期再见!!!

21610

java类加载初始化_java静态变量什么时候初始化

目录 一、类的加载与ClassLoader的理解 1、加载 2、链接 3、初始化 二、什么时候会发生类初始化 1、类的主动引用(一定会发生类的初始化) 2、类的被动调用(不会发生类的初始化) 三、类加载器的作用...四、动态创建对象执行方法 一、类的加载与ClassLoader的理解 1、加载 将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.class...当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化。 虚拟机会保证一个类的()方法在多线程环境中被正确加锁和同步。...包的方法对类进行反射调用; 当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类; 2、类的被动调用(不会发生类的初始化) 当访问一个静态域时,只有真正声明这个域的类才会被初始化。...如:当通过子类引用父类的静态变量,不会导致子类初始化; 通过数组定义类引用,不会触发此类的初始化; 引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了); 三、类加载器的作用 将class

41820

加载的过程1 加载2 验证3 准备4 解析5 初始化

文件) 在程序运行过程中,当要访问一个类时,若发现这个类尚未被加载,并满足类初始化的条件时,就根据要被初始化的这个类的全限定名找到该类的二进制字节流,开始加载过程 将这个字节流的静态存储结构转化为方法区的运行时数据结构...加载阶段和链接阶段是交叉的 类加载的过程中每个步骤的开始顺序都有严格限制,但每个步骤的结束顺序没有限制.也就是说,类加载过程中,必须按照如下顺序开始: 加载、链接、初始化,但结束顺序无所谓,因此由于每个步骤处理时间的长短不一就会导致有些步骤会出现交叉...在准备阶段,类中静态成员变量已经完成了默认初始化,而在初始化阶段,clinit()方法对静态成员变量进行显示初始化。...接口也需要通过clinit()方法为接口中定义的静态成员变量显示初始化。...其他线程虽会被阻塞,只要有一个clinit()方法执行完,其它线程唤醒后不会再进入clinit()方法.同一个类加载器下,一个类型只会初始化一次.

618120

JVM详解之:类的加载链接和初始化

简介 有了java class文件之后,为了让class文件转换成为JVM可以真正运行的结构,需要经历加载,链接和初始化的过程。 这三个过程是怎么工作的呢?在本文中你将会找到答案。...02 类加载器 类是怎么创建的呢?类的创建可以是由其他类调用该类的初始化方法来创建,也可以通过反射来创建。 类其实又可以分为两种,一种是数组类,一种是非数组类。...java虚拟机中的类加载器又有两种,一种是虚拟机提供的引导类加载器,一种是用户自定义的类加载器。 如果是用户自定的类加载器,那么应该是ClassLoader的一个实现。...初始化 类或者接口的初始化是指执行类或者接口的初始化方法。...对类的某个子类进行初始化的时候。 被选定为java虚拟机启动时候的初始类的时候。 总结 class文件经过加载,链接和初始化之后,就可以提供给JVM在运行时使用了。

76931

二、类加载器与类初始化深度剖析

1 Demo01 的执行结果是 3 ,没有输出静态代码块中的内容,就代表静态代码块没有被执行,也就是说类没有被初始化,如果类被初始化了,静态代码块是一定会执行的。     ...的常量池中,所以编译完后,MyTest01 和 FinalTest之间就没有任何关系了,删除FinalTest.class 没有任何关系 Demo02 的执行结果的原因是 : x 不是一个成员变量,需要加载类...,所需需要初始化类 Demo03 结果出现的原因是: x 是一个成员变量,但是他的数值实在运行期才能确定的,所以需要加载FinalTest类 Demo04:  代码如下,请判断代码的执行结果 package...  代码的执行结果如下:     MyTest9 static block   Parent static block   Child static block   4 出现这样结果的原因: 首先初始化...Main 方法所在类,然后这类调用了 Child类的成员变量,导致了Child类的初始化,一个类的初始化首先会初始化他的父类,然后初始化他的子类   可用通过运行时 添加JVM参数来查看类的加载 ?

31630

JVM规范系列第5章:加载、链接与初始化

类或接口的初始化是指执行类或接口的初始化方法(§ 2.9) 初始化,就是执行方法的过程。 Java 虚拟机为每个类型都维护一个常量池。...这段话描述了引导类加载器如何加载类或接口,可以详细看看。 首先, Java 虚拟机检查 L 是否为已经加载过的标识为 N 的类或接口的初始加载器。...链接 类加载器需要特别考虑到类型的安全链接问题。一种可能出现的情况是,当两个不同的类加载器初始加载标记为 N 的类或接口时,在每个加载器里 N 表示着不同的类或接口。...初始化 初始化(Initialization) 对于类或接口来说,就是执行它的初始化方法(§ 2.9)。 这里就是开始执行初始化方法了,包括和两个初始化方法。...执行上面所述的 new 指令,在类或接口没有被初始化过时就初始化它。

45020

技术转载——详解Java 类的加载、连接和初始化

系统可能在第一次使用某个类时加载该类,也可能采用预加载机制来加载某个类。本节将会详细介绍类加载、连接和初始化过程中的每个细节。...类的加载 当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化三个步骤来对该类进行初始化。...也就是说,当 Test 类初始化结束后,该类的类变量b的值为9。 JVM 初始化一个类包含如下几个步骤。 ①假如这个类还没有被加载和连接,则程序先加载并连接该类。...当使用 ClassLoader 类的 loadClass() 方法来加载某个类时,该方法只是加载该类,并不会执行该类的初始化。使用 Class 的 forName() 静态方法才会导致强制初始化该类。...,但第一行粗体字代码只是加载 Tester 类,并不会初始化 Tester 类。

41120

JVM类加载、验证、准备、解析、初始化、卸载过程详解

Java的类加载器是一个运行时核心基础设施模块,主要是在启动之初进行类的加载、链接、初始化: Java 类加载过程 ? Load-加载 由类加载器执行。...在这个过程中,JVM会初始化继承树上还没有被初始化过的所有父类,并且会执行这个链路上所有未执行过的静态代码块、静态变量赋值语句等。 某些类在使用时,也可以按需由类加载器进行加载。...就根据要被初始化的这个类的全限定名找到该类的二进制字节流,开始加载过程。...加载阶段和链接阶段是交叉的 类加载的过程中每个步骤的开始顺序都有严格限制,但每个步骤的结束顺序没有限制.也就是说,类加载过程中,必须按照如下顺序开始: 加载 -> 链接 -> 初始化 但结束顺序无所谓...如果类还没有加载和连接,就先加载和连接 如果类存在父类,且父类没有初始化,就先初始化父类 如果类中存在初始化语句,就依次执行这些初始化语句 如果是接口 初始化一个类时,并不会先初始化它实现的接口

25020

Java类加载机制的七个阶段,加载、验证、准备、解析、初始化、使用、卸载

Java类加载机制的七个阶段 当我们的Java代码编译完成后,会生成对应的 class 文件。...而 JVM 虚拟机执行 class 字节码的过程可以分为七个阶段:加载、验证、准备、解析、初始化、使用、卸载。 ? 加载 下面是对于加载过程最为官方的描述。 加载阶段是类加载过程的第一个阶段。...其实加载阶段用一句话来说就是:把代码数据加载到内存中。这个过程对于我们解答这道问题没有直接的关系,但这是类加载机制的一个过程,所以必须要提一下。...当代码数据被加载到内存中后,虚拟机就会对代码数据进行校验,看看这份代码是不是真的按照JVM规范去写的。这个过程对于我们解答问题也没有直接的关系,但是了解类加载机制必须要知道有这个过程。 ?...,如果类没有进行过初始化,则需要先触发其初始化

6.4K40

Spring Ioc源码分析 之 Bean的加载(八):初始化

bean 实例对象 依赖检查 注册bean的销毁方法 一、初始化 Spring在对Bean进行属性填充之后,会对Bean进行初始化,代码如下: //AbstractAutowireCapableBeanFactory.java...bean 的方法其实就是三个步骤的处理,而这三个步骤主要还是根据用户设定的来进行初始化,这三个过程为: 激活 Aware 方法。...Spring 提供了如下系列的 Aware 接口: LoadTimeWeaverAware:加载Spring Bean时织入第三方模块,如AspectJ BeanClassLoaderAware:加载...Spring Bean的类加载器 BootstrapContextAware:资源适配器BootstrapContext,如JCA,CCI ResourceLoaderAware:底层访问资源的加载器...1.2、后置处理器 BeanPostProcessor 在前面介绍 bean 加载的过程曾多次遇到, 它的作用是: 如果我们想要在 Spring 容器完成 Bean 的实例化,配置和其他的初始化后添加一些自己的逻辑处理

57930

求知 | 聊聊Android资源加载那些事 - Resource的初始化

Hi,你好 引言 在上一篇,求知 | 聊聊Android资源加载的那些事 - 小试牛刀 中,我们通过探讨 Resource.getx() ,从而解释了相关方法的背后实现, 明白了那些我们日常调用方法的背后实现...介于此,本篇将与你一同探讨关于 Resources 初始化的那些事,从而建立起应用层资源加载的整体脉络。...所以我们自然也无法用它去加载我们 Apk 内部的资源文件。 小问题 在了解了上述流程后,如果你存在以下问题(就是这么倔强),那么不妨鼓励鼓励自己,[你没掉队]!...首先说说 ActivityResource ,见名知意,它是作为 Resources 的包装类型出现,内部持有当前要加载的配置,以及真正的 Resources 。...原来 Resource.getSystem() 无法加载应用资源的原因只是因为 AssetManager 对应的资源路径是 formeWrok 。

25710
领券