首页 > 编程语言 >java类的加载顺序及复杂案例(阿里)

java类的加载顺序及复杂案例(阿里)

时间:2024-07-10 11:00:03浏览次数:11  
标签:初始化 java 变量 实例 静态 子类 阿里 父类 加载

一.无继承关系的情况下

在Java中,类的初始化顺序涉及到多个方面,包括静态变量、静态初始化块、实例变量、实例初始化块(也称为构造器初始化块或初始化块)以及构造器的执行顺序。这里是一个详细的顺序说明:

  1. 静态变量和静态初始化块
    • 当类被加载到JVM时,类的静态成员(静态变量和静态初始化块)会被初始化。
    • 静态初始化块和静态变量的初始化顺序取决于它们在类定义中出现的顺序。
    • 静态初始化块只会在类被加载时执行一次,不管创建了多少个类的实例。
  2. 实例变量和实例初始化块
    • 当创建类的实例时,实例变量和实例初始化块会被初始化。
    • 实例初始化块(如果没有使用显式构造函数或者使用了无参构造函数)在每次创建类的实例时都会执行。
    • 实例初始化块和实例变量的初始化顺序也取决于它们在类定义中出现的顺序。
  3. 构造器
    • 在所有静态成员初始化之后,当创建类的实例时,相应的构造器会被调用。
    • 构造器负责初始化实例变量(如果它们还没有在实例初始化块或声明时初始化),并执行任何必要的初始化代码。
    • 如果类定义了多个构造器,则根据创建实例时使用的构造器来执行相应的初始化代码。
  4. 总结顺序
    • 静态变量和静态初始化块(按照它们在类中出现的顺序)
    • 实例变量和实例初始化块(按照它们在类中出现的顺序,每次创建实例时)
    • 构造器(每次创建实例时)

注意:

  • 静态初始化块和静态变量只会在类加载时初始化一次。
  • 实例初始化块和实例变量会在每次创建类的实例时初始化。

二.有继承关系的情况下

在Java中,当存在继承关系时,类的初始化顺序会遵循一定的规则。这些规则确保了父类在子类之前被正确地初始化和构造,从而保证了继承关系的正确性和对象的完整性。以下是具体的初始化顺序:

  1. 静态变量和静态初始化块
    • 首先,会初始化父类的静态变量和静态初始化块(如果有的话),按照它们在父类中出现的顺序进行。
    • 然后,会初始化子类的静态变量和静态初始化块(如果有的话),同样按照它们在子类中出现的顺序进行。
    • 需要注意的是,静态成员(静态变量和静态初始化块)的初始化只会在类被加载到JVM时发生一次,与创建多少个类的实例无关。
  2. 实例变量和实例初始化块
    • 当创建子类的实例时,会先初始化父类的实例变量和实例初始化块(如果有的话),按照它们在父类中出现的顺序进行。
    • 接着,会初始化子类的实例变量和实例初始化块(如果有的话),同样按照它们在子类中出现的顺序进行。
  3. 构造器
    • 在所有静态成员和实例成员初始化之后,会调用子类的构造器。
    • 在子类构造器执行之前,会先隐式或显式地调用父类的构造器(如果子类构造器中没有显式调用父类的其他构造器,则默认调用父类的无参构造器)。
    • 父类构造器负责初始化父类的实例变量(如果它们还没有在父类的实例初始化块或声明时初始化),并执行父类的构造器代码。
    • 接着,子类构造器会执行,负责初始化子类的实例变量(如果它们还没有在子类的实例初始化块或声明时初始化),并执行子类的构造器代码。

综上所述,Java中继承关系的类的初始化顺序为:

  1. 父类静态变量和静态初始化块(按出现顺序)。
  2. 子类静态变量和静态初始化块(按出现顺序)。
  3. 父类实例变量和实例初始化块(按出现顺序)。
  4. 父类构造器。
  5. 子类实例变量和实例初始化块(按出现顺序)。
  6. 子类构造器。

三、复杂案例

运行

标签:初始化,java,变量,实例,静态,子类,阿里,父类,加载
From: https://blog.csdn.net/weixin_69039908/article/details/140291473

相关文章

  • JavaScript复习记录(2)— 浅拷贝&深拷贝
    1、前情概要1.1、基本数据类型    Number、String、Boolean、Null、Undefined、Symbol、BigInt。基本数据类型是直接存储在栈中的数据。1.2、引用数据类型    Object、Array、Function、Date、RegExp、Map、Set、WeekMap、WeekSet、Promise、Error、Buffe......
  • 基于JavaWeb的酒店管理系统(源码+数据库+项目展示文档+部署文档)
    酒店管理系统报告系统概述酒店管理系统是为酒店设计开发的管理平台,旨在提供完善的管理功能以支持酒店的日常运营和管理。该系统基于JavaWeb技术栈开发,使用Servlet和JSP作为主要服务端技术,前端设计采用Layui和jQuery框架,通过美观的Windows风格界面提供用户友好的操作体验。系......
  • 加载技术和机制各有特点,根据不同的应用场景和需求,开发人员可以选择合适的方式来优化程
    在Windows操作系统中,加载技术通常指的是操作系统如何加载和执行进程、驱动程序或模块的过程。这些加载技术可以根据它们的功能和执行方式进行分类:进程加载:普通进程加载:Windows通过 CreateProcess 或 CreateProcessEx 等API函数加载普通用户进程。这些进程通常从可执行文......
  • [0033]基于JAVA的OA办公智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的OA办公智慧管理系统的设计与实现指导老师(一)选题的背景和意义随着社会的发展,越来越多的企业开始使用办公自动化系统来提高工作效率,减少人力成本,增强协同工作的能力。但是现有的办公自动化系统......
  • 计算机毕业设计必看必学18363+健康码采集系统原创定制程序,java、PHP、python、小程序
    springboot健康码采集系统摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,校园当然也不例外。健康码采集系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开......
  • 基于java+springboot+vue实现的音乐网站(文末源码+Lw)102
     功能介绍:本音乐网站管理员功能有个人中心,用户管理,歌曲分类管理,歌曲信息管理,管理员管理,系统管理等。用户可以注册登录,试听歌曲,可以下载歌曲。因而具有一定的实用性。本站是一个B/S模式系统,采用SpringBoot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、......
  • 基于java+springboot+vue实现的校园社团管理平台(文末源码+Lw)101
     本校园社团信息管理系统功能有个人中心,学生管理,社长管理,社团分类管理,社团信息管理,加入社团管理,社团成员管理,社团活动管理,活动报名管理,系统管理等。社长添加社团,管理员审核社团,学生加入社团,社长审核社团。因而具有一定的实用性。本站是一个B/S模式系统,采用SpringBoot框架,MY......
  • 【转】-Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore该博客转载自​Matrix海子​的​Java并发编程:CountDownLatch、CyclicBarrier和Semaphore在java1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下......
  • 基于java+springboot+vue实现的音乐网站(文末源码+Lw)102
     功能介绍:本音乐网站管理员功能有个人中心,用户管理,歌曲分类管理,歌曲信息管理,管理员管理,系统管理等。用户可以注册登录,试听歌曲,可以下载歌曲。因而具有一定的实用性。本站是一个B/S模式系统,采用SpringBoot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、......
  • 基于java+springboot+vue实现的校园社团管理平台(文末源码+Lw)101
     本校园社团信息管理系统功能有个人中心,学生管理,社长管理,社团分类管理,社团信息管理,加入社团管理,社团成员管理,社团活动管理,活动报名管理,系统管理等。社长添加社团,管理员审核社团,学生加入社团,社长审核社团。因而具有一定的实用性。本站是一个B/S模式系统,采用SpringBoot框架,MY......