当前位置: 首页 > news >正文

【Java基础知识系列】之Java类的初始化顺序

前言

在这里插入图片描述

类的初始化顺序

  • 简单场景
    • 代码示例
    public class Person {private String name = initName();private String initName() {System.out.println("【父类】初始化实例变量name");return "【父类】史蒂夫";}private int age;private static int staticVar1 = initStaticVar1();private static int staticVar2;private static int initStaticVar1() {System.out.println("【父类】初始化静态变量staticVar1");return 100;}public Person() {System.out.println("【父类】我是无参构造方法");}public Person(String name, int age) {System.out.println("【父类】我是有参构造方法");this.name = name;this.age = age;}{System.out.println("【父类】我是实例代码块");}static {System.out.println("【父类】我是静态代码块");}}
    
    public class PersonTest {@Testpublic void testInitPerson() {Person person = new Person();System.out.println();Person person1 = new Person();System.out.println();Person person2= new Person("工藤新一",22);}}
    
    • 输出结果
    【父类】初始化静态变量staticVar1
    【父类】我是静态代码块
    【父类】初始化实例变量name
    【父类】我是实例代码块
    【父类】我是无参构造方法【父类】初始化实例变量name
    【父类】我是实例代码块
    【父类】我是无参构造方法【父类】初始化实例变量name
    【父类】我是实例代码块
    【父类】我是有参构造方法
    
  • 复杂场景(有继承)
    • 代码示例
    public class Man extends Person {private String name = initName();private String initName() {System.out.println("【子类】初始化实例变量name");return "【子类】工一";}private int age;private static int staticVar1 = initStaticVar1();private static int staticVar2;private static int initStaticVar1() {System.out.println("【子类】初始化静态变量staticVar1");return 100;}public Man() {System.out.println("【子类】我是无参构造方法");}public Man(String name, int age) {System.out.println("【子类】我是有参构造方法");this.name = name;this.age = age;}{System.out.println("【子类】我是实例代码块");}static {System.out.println("【子类】我是静态代码块");}}
    
    public class ManTest {@Testpublic void testInitMan() {Man man = new Man();System.out.println();Man man1 = new Man();System.out.println();Man man2 = new Man("工藤新一", 22);}}
    
    • 输出结果
    【父类】初始化静态变量staticVar1
    【父类】我是静态代码块
    【子类】初始化静态变量staticVar1
    【子类】我是静态代码块
    【父类】初始化实例变量name
    【父类】我是实例代码块
    【父类】我是无参构造方法
    【子类】初始化实例变量name
    【子类】我是实例代码块
    【子类】我是无参构造方法【父类】初始化实例变量name
    【父类】我是实例代码块
    【父类】我是无参构造方法
    【子类】初始化实例变量name
    【子类】我是实例代码块
    【子类】我是无参构造方法【父类】初始化实例变量name
    【父类】我是实例代码块
    【父类】我是无参构造方法
    【子类】初始化实例变量name
    【子类】我是实例代码块
    【子类】我是有参构造方法
    

结论

  • 简单场景
    静态变量>静态代码块>实例变量>实例代码块>构造方法

    其中静态代码块和静态变量只会执行一次(第一次new对象的时候会执行)
  • 有继承场景
    【父类】静态变量>【父类】静态代码块>【子类】静态变量>【子类】静态代码块>【父类】实例变量>【父类】实例代码块>【父类】构造方法>【父类】实例变量>【父类】实例代码块>【父类】构造方法

    其中【父类】静态变量 、【父类】静态代码块、【子类】静态变量 、【子类】静态代码块只会执行一次(第一次new对象的时候会执行)

术语

  • 静态变量
  • 成员变量
  • 静态代码块
  • 实例代码块
  • 构造方法

你问我答

1.Q:静态变量,成员变量,静态代码块、动态代码块、构造方法在代码中的位置顺序会影响执行结果么?

A:不会

源码地址

Java类的初始化顺序-源码

参考文章

  • Java类的初始化顺序
  • Java类的执行顺序

相关文章:

【Java基础知识系列】之Java类的初始化顺序

前言 类的初始化顺序 简单场景 代码示例 public class Person {private String name initName();private String initName() {System.out.println("【父类】初始化实例变量name");return "【父类】史蒂夫";}private int age;private static int staticVa…...

Swift 宏(Macro)入门趣谈(二)

概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏(Swift Macro)。为此,苹果特地用 2 段视频(入门和进阶)颇为隆重的介绍了它。 那么到底 Swift 宏是什么?有什么用&…...

vue elementui el-dropdown-item设置@click无效的解决方案

如图&#xff0c;直接在el-dropdown-item上面设置click&#xff0c;相应的method并没有被触发&#xff0c;查找资料发现需要在它的上级 el-dropdown 处使用 command 方法触发。 【template】 <el-dropdown placement"bottom-end" command"handleCommand&quo…...

如何用re从第1排第2个位置中找到两个数字返回(0,1)

以下是使用 Python 的re模块从第1班第2个位置这样的字符串中提取出数字并返回类似(0, 1)这种形式的示例代码&#xff0c;假设数字都是一位数的情况&#xff08;如果是多位数可以按照后续介绍稍作调整&#xff09;&#xff1a; import redef extract_numbers(text):numbers re.…...

vue中的keep-alive是什么,有哪些使用场景,使用了什么原理,缓存后如何更新数据

<keep-alive> 是 Vue.js 提供的一个内置组件&#xff0c;用于缓存动态组件&#xff0c;避免频繁的销毁和重建。这在某些场景下可以显著提升性能&#xff0c;特别是在组件频繁切换的情况下。以下是对 keep-alive 的详细讲解&#xff0c;包括它的定义、使用场景、原理分析、…...

LeetCode105.从前序与中序遍历构造二叉树

题目要求 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 提示: 1 < preorder.length < 3000inorder.length preorder.length-3000 < pr…...

LeetCode654.最大二叉树

LeetCode刷题记录 文章目录 &#x1f4dc;题目描述&#x1f4a1;解题思路⌨C代码 &#x1f4dc;题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子…...

C# 字段和属性

在 C# 中&#xff0c;字段和属性是定义类和结构体数据的两种方式。 字段用于直接存储数据&#xff0c;而属性提供了对字段的封装和访问控制。 1. 字段&#xff08;Fields&#xff09; 定义 字段是类或结构体中用于存储数据的变量。字段可以是任何数据类型&#xff0c;包括基…...

【leetcode】N皇后 回溯法c++

目录 51.N皇后 52.N皇后II 51.N皇后 51. N 皇后 - 力扣&#xff08;LeetCode&#xff09; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间…...

Ubuntu 系统端口查询与管理详细分析

目录 前言1. 查询端口占用情况2. 释放占用的端口3. 修改应用程序的端口 前言 Window的端口被占用&#xff0c;类似的知识点&#xff1a;重装mysql时3306端口被占用解决方法 事情起因是宝塔的CPU负载过大&#xff0c;重启服务进程之后还是爆&#xff0c;后续发现是端口被占用&…...

Unity中使用StartCoroutine协程和Lerp方法,使GameObject缓慢移动

移动方法&#xff08;传入需要移动的instance和目标位置&#xff09; public Transform targetPosition; //目标位置 Vector3 target targetPosition.position;private IEnumerator MoveTowardsTarget(GameObject instance, Vector3 target){// 缓慢移动到目标的方法Vector3 …...

C++根据特定字符截取字符串

前言 在 C 中&#xff0c;如果根据特定字符进行字符串的截取&#xff0c;可以使用 std::string 类的成员函数 find() 来查找字符的位置&#xff0c;然后使用 substr() 来截取字符串。以下是一个示例&#xff0c;展示了如何根据指定字符截取字符串。 示例 #include <iostr…...

【How AI Works】读书笔记3 出发吧! AI纵览 第二部分

目录 1.说明 2.第二部分(P9~P10) 机器学习算法总结(监督学习) 3.单词 4.专业术语 1.说明 书全名:How AI Works From Sorcery to Science 作者 Ronald T.Kneusel 2.第二部分(P9~P10) 总结机器学习算法 作者把机器学习的过程比喻成输入-->黑盒-->输出 这里的标签可…...

No Module named pytorchvideo.losses问题解决

问题描述 最近在跑X3D的源码时发现&#xff0c;在conda powershell prompt中安装了pytorchvideo&#xff0c;但是仍然报错&#xff1a;No Module named pytorchvideo.losses 解决方案&#xff1a; 直接去https://gitcode.com/gh_mirrors/py/pytorchvideo/overview?utm_sour…...

Mac终端字体高亮、提示插件

一、安装配置“oh my zsh” 1.1 安装brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 按照步骤安装即可&#xff0c;安装完成查看版本 brew -v 1.2 安装zsh brew install zsh 安装完成后查看版本 zsh --version 1.3 …...

Flowable 构建后端服务(后端以及数据库搭建) Flowable Modeler 设计器搭建(前端)

案例地址&#xff1a;xupengboo-flowable-example Flowable 构建后端服务&#xff08;后端以及数据库搭建&#xff09; 以 Spring Boot 项目为例&#xff1a; 引入 Flowable 必要依赖。 <!-- flowable 依赖 --> <dependency><groupId>org.flowable</gr…...

[Java]微服务拆分

导入项目 本篇及后续的微服务学习都是基于Centos7系统下的Docker部署&#xff0c;因此需要准备: Centos7的环境SSH客户端安装好Docker会使用Docker 之前的学习, 导致虚拟机中存在黑马商城项目以及mysql数据库, 为了保持一致, 需要删除 cd /rootdocker compose down 安装mysq…...

JavaScript逆向爬虫教程-------基础篇之JavaScript混淆原理

目录 一、常量的混淆原理1.1 对象属性的两种访问方式1.2 十六进制字符串1.3 Unicode字符串1.4 字符串的ASCII码混淆1.5 字符串常量加密1.6 数值常量加密二、增加 JS 逆向者的工作量2.1 数组混淆2.2 数组乱序2.3 花指令2.4 jsfuck三、代码执行流程的防护原理3.1 流程平坦化3.2 …...

qt移植到讯为rk3568,包含一些错误总结

qt移植到arm报错动态库找不到 error while loading shared libraries: libAlterManager.so.1: cannot open shared object file: No such file or directory 通过设置环境变量 LD_LIBRARY_PATH就行了。 LD_LIBRARY_PATH是一个用于指定动态链接器在运行时搜索共享库的路径的环…...

使用阿里云快速搭建 DataLight 平台

使用阿里云快速搭建 DataLight 平台 本篇文章由用户 “闫哥大数据” 分享&#xff0c;B 站账号&#xff1a;https://space.bilibili.com/357944741?spm_id_from333.999.0.0 注意&#xff1a;因每个人操作顺序可能略有区别&#xff0c;整个部署流程如果出现出入&#xff0c;以…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...