2024年最新Java~类加载的基本过程-附带一道经典题目讲解,从入门到精通系列Java高级工程师路线介绍

最后

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

      • 类加载的五个基本过程
  • 什么时候会触发类加载(重点)

  • 经典题目

  • 常见的一些类加载器

  • 什么是双亲委派模型

类加载的五个基本过程

  1. 加载 根据路径找到想对应的class文件 并将这个文件加载到Java虚拟机中(存储到方法区内)

类加载分为隐式类加载和显示类加载 隐式类加载是指在层程序使用new关键词创建的对象时, 会隐式的调用类的加载器把对应的类加载到JVM中. 显示类加载指的是通过直接调用class.forName() 方法把所需要的类加载到JVM中

  1. 检查: 检查类加载的class文件的正确性(文件格式检验 元数据验证 字节码验证 符号引用验证)

  2. 准备: 给类加载的静态变量分配内存空间并赋予初始默认值

  3. 解析: 虚拟机将常量池中的符号引用替换成直接引用得过程, 符号引用就可以理解为一个标识 而在直接引用就可以直接指向内存中的地址

  4. 初始化: 为静态变量和静态代码块指向初始化工作(执行静态代码块和静态变量)

什么时候会触发类加载(重点)

  1. 构造该类的实例的时候

  2. 调用该类的静态属性或方法的时候

  3. 使用子类时会触发父类的加载

经典题目

/**

  • Created with IntelliJ IDEA.

  • Description: If you don’t work hard, you will a loser.

  • User: Listen-Y.

  • Date: 2020-08-04

  • Time: 15:34

*/

class One {

public One() {

System.out.println(“One 构造”);

}

{

System.out.println(“One 实例”);

}

static {

System.out.println(“One 静态”);

}

}

class Two extends One {

public Two() {

System.out.println(“Two 构造”);

}

{

System.out.println(“Two 实例”);

}

static {

System.out.println(“Two 静态”);

}

}

public class Demo1 extends Two{

public static void main(String[] args) {

System.out.println(“开始”);

new Two();

new Two();

System.out.println(“结束”);

}

}

结果为:

One 静态

Two 静态

开始

One 实例

One 构造

Two 实例

Two 构造

One 实例

One 构造

Two 实例

Two 构造

结束

  • 分析:
  1. 代码从main方法开始执行 main方法是Demo的静态方法 就会触发Demo的类加载

  2. Two是Demo的父类 所以在加载Demo前会先加载Two 但是呢one又是Two的父类 就又会优先加载

  3. 加载One的静态代码块输出 One静态

  4. 加载Two的静态代码块 输出 Two静态

  5. Demo没有静态代码块了就会执行main方法的内容 输出 开始

  6. 在构造Two的实例的时候会先构造One的实例 就会先执行One的代码块和构造方法 然后才执行Two的代码块和构造方法 所以输出One实例 One构造 Two实例 Two构造

  7. 进行第二次构造Two的时候和第一次构造一样输出One实例 One构造 Two实例 Two构造

  8. 最后打印结束

  • 如果我们稍微改一下代码让Demo不继承Two会发生怎样的情况

/**

  • Created with IntelliJ IDEA.

  • Description: If you don’t work hard, you will a loser.

  • User: Listen-Y.

  • Date: 2020-08-04

  • Time: 15:34

*/

class One {

public One() {

System.out.println(“One 构造”);

难道这样就够了吗?不,远远不够!

提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记

我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。

今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

image.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

片转存中…(img-8KifD7vZ-1715141167691)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值