android显示过程,Android学习笔记一:Java类加载过程

本文详细阐述了Java类的加载过程,包括从类全名获取字节流、转换为方法区数据结构、在堆中创建Class对象等步骤。同时,介绍了对象创建过程,包括类的静态和非静态内容加载、静态变量初始化以及构造函数执行的顺序。还探讨了类加载器的双亲委派模型,防止类的重复加载,并分析了不同ClassLoader的角色。最后,提到了Android插件化中类加载器的应用。
摘要由CSDN通过智能技术生成

简单描述Java类加载过程

根据类全名获取类的二进制字节流

将二进制字节流所代表的的静态存储结构转换成方法区中的数据结构

然后在堆中实例化代表这个类的java.lang.Class对象,作为对方法区数据的访问入口

【深入Java虚拟机】之三:类初始化

https://blog.csdn.net/ns_code/article/details/17845821)

【深入Java虚拟机】之四:类加载机制

http://blog.csdn.net/ns_code/article/details/17881581)

简单描述对象创建过程

JVM会先去方法区中找有没有相应类的.class存在。如果有,就直接使用;如果没有,则把相关类的.class加载到方法区

在.class加载到方法区时,会分为两部分加载:先加载非静态内容,再加载静态内容

加载非静态内容:把.class中的所有非静态内容加载到方法区下的非静态区域内

加载静态内容:

把.class中的所有静态内容加载到方法区下的静态区域内

静态内容加载完成之后,对所有的静态变量进行默认初始化

所有的静态变量默认初始化完成之后,再进行显式初始化

当静态区域下的所有静态变量显式初始化完后,执行静态代码块

当静态区域下的静态代码块,执行完之后,整个类的加载就完成了。

Java中类加载过程和对象创建过程

http://blog.csdn.net/u014338577/article/details/49968253

Java 类的加载过程(阿里面试题)

加载方法不等于执行方法,初始化变量则会赋值

类加载顺序应为加载静态方法-初始化静态变量-执行静态代码块

实例化时先加载非静态方法-实例化非静态变量-执行构造代码块-执行构造函数

Java 类的加载过程(阿里面试题)

https://www.cnblogs.com/tengpan-cn/p/5869099.html

Java静态代码块、构造代码块、构造方法的执行顺序

执行静态代码块——>执行构造代码块——>执行构造方法

JVM(三):类加载机制(类加载过程和类加载器)

双亲委派模型的工作过程为:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的加载器都是如此,因此所有的类加载请求都会传给顶层的启动类加载器,只有当父加载器反馈自己无法完成该加载请求(该加载器的搜索范围中没有找到对应的类)时,子加载器才会尝试自己去加载

JVM(三):类加载机制(类加载过程和类加载器)

http://blog.csdn.net/boyupeng/article/details/47951037

深入分析ClassLoader

e1d9bf0457857b8685a0eac27ec7e0de.png

BootstrapClassLoader

ExtensionClassLoader

ApplicationClassLoader

CustomClassLoader

加载特定目录下的jar包文件:

jre\lib\*.jar

加载特定目录下的jar包文件:

jre\lib\ext\*.jar

加载classpath目录下的jar包文件或类文件,比如:

jdk\lib\*.jar

加载自定义目录相关类文件

深入分析ClassLoader

http://blog.csdn.net/tonytfjing/article/details/47212291

Custom ClassLoader、Application ClassLoader、Extension ClassLoader、Bootstrap ClassLoader会不会重复加载的同一个class文件

虽然有不同的ClassLoader,但通常同一份class文件只会被加载一次,这是因为由JVM的双亲委派机制决定的

双亲委派机制,指的是如果一个类加载器收到一个加载请求,如果存在父类加载器,它不会自己去处理,而是把请求反馈给父类加载器;同理,父类加载器也会检查自己是否存在另一个父类加载器,依次将加载请求往上传递;直到将请求传递给顶层加载器,只有当顶层父类加载器无法处理加载请求时,才把加载请求反馈给子加载器,这样的一种加载机制保证同一个class文件只被加载一次

能不能自己写个类叫java.lang.System?

因为双亲委派机制的原因,父类加载器加载的类,子类加载器是没有机会加载的。java.lang.System是由Bootstrap ClassLoader加载的类,即使重写了,也不会被重新加载

JVM(三):类加载机制(类加载过程和类加载器)

http://blog.csdn.net/boyupeng/article/details/47951037

Android插件化探索(一)类加载器DexClassLoader

http://blog.csdn.net/maplejaw_/article/details/51493843

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值