【Java】看看关于代码块的这些知识,你掌握了多少?

在这里插入图片描述

  • 作者:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:算法、数据结构、Java等相关知识。
  • 博主主页: @是瑶瑶子啦
  • 所属专栏: Java岛冒险记【从小白到大佬之路】;该专栏专注于Java相关知识,持续更新,每一篇内容优质,浅显易懂,不失深度!
  • 近期目标:写好专栏的每一篇文章

🙆‍♀️前言

一个类是由很多成员所构成,大致分为以下成员。在前面的学习中,我们学习了成员变量和成员方法。今天我们学习类中的另一个成员:代码块
在这里插入图片描述

目录

  • 🙆‍♀️前言
  • 🌸一、基本介绍
  • 🌺二、代码块分类&作用
    • 2.1:静态代码块
    • 2.2:构造代码块
  • 💐三:执行顺序再深入

🌸一、基本介绍

简单来说,代码块就是用花括号{ }包围起来的一块代码。

语法格式

[修饰符] {
	代码
}

我们看到,就格式而言,代码块和方法(method)有点类似。

代码块vs方法

首先,代码块没有方法名,没有参数列表,没有返回值。这是肉眼可见,与方法不同的点。

其次,在调用上,既然都是数据和操作数据组成的代码,那么都是写来被执行的。对于方法而言,必须要被调用,方法体中的代码才可被执行。那对于静态代码块呢?静态代码块中的代码何时被执行?要弄清楚这个,以及代码块执行的作用,我们先学习代码块的分类,因为不同的代码块有区别,不可一概而论。

🌺二、代码块分类&作用

首先我们可以根据修饰符的不同,即有无static修饰。分为以下两种:

  • 静态代码块
  • 构造代码块

Tips:这里我们讨论的代码块,位置都是位于类中的,不去考虑位于方法中的代码块。

2.1:静态代码块

所谓静态代码块,就是被static所修饰的代码块
eg:

class Person {
    //实例成员变量
    private String name;
    private int age;
    private String sex;
    //静态成员变量
    private static int countNum;

    static {
        countNum = 0;
        System.out.println("countNum初始化完毕");
    }
}
  • 作用:初始化静态成员属性
  • 执行时机:随着类的加载而执行

2.2:构造代码块

构造代码块,是指没有被static修饰的代码块,也叫作实例代码块
eg:

class Person {
    //实例成员变量
    private String name;
    private int age;
    private String sex;
    //静态成员变量
    private static int countNum;

    //静态代码块
    static {
        countNum = 0;
        System.out.println("countNum初始化完毕");
    }

    //构造代码块
    {
        this.name = "yaoyao";
        this.age = 18;
        this.sex = "female";
    }
}
  • 作用:初始化实例成员变量
  • 执行时机:对象创建后,调用本类构造器前
  • 和构造器的关系:
 public Person(String name, int age, String sex) {
        //super()
        //调用本类的构造代码块
        
        //以下是本类构造器的实现
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

可以看到,当创建对象时,会调用构造器,但构造器中其实还有隐藏的:super()(即调用父类构造器,进行初始化),调用本类构造代码块,最后再执行本类构造器中的初始化代码。

如果对于代码块的执行顺序,还是不是很清晰,那么下面这一Part,会带你清晰的掌握,什么样的代码块在什么时候执行。

💐三:执行顺序再深入

当我们创建一个有继承关系的子类时,内存中,代码执行情况是怎样的呢?

Inheritance
Inheritance
classA
classB
classC
public class A {
    static {
        System.out.println("A类静态代码块被执行");
    }

    {
        System.out.println("A类构造代码块被执行");
    }

    public A() {
        //super();
        //调用A类普通代码块
        System.out.println("A类构造方法被调用");
    }
}

public class B extends A{
    static {
        System.out.println("B类静态代码块被执行");
    }

    {
        System.out.println("B类构造代码块被执行");
    }

    public B() {
        //super();
        //调用A类普通代码块
        System.out.println("B类构造方法被调用");
    }
}
public class C extends B{
    static {
        System.out.println("C类静态代码块被执行");
    }

    {
        System.out.println("C类构造代码块被执行");
    }

    public C() {
        //super();
        //调用A类普通代码块
        System.out.println("C类构造方法被调用");
    }
}

以下是测试类,用来测试子类C被创建时,代码块、构造方法执行顺序

public class Test {
    public static void main(String[] args) {
        C c = new C();
        //A类静态代码块被执行
        //B类静态代码块被执行
        //C类静态代码块被执行
        //A类构造代码块被执行
        //A类构造方法被调用
        //B类构造代码块被执行
        //B的构造方法被调用
        //C类构造代码块被执行
        //C类构造方法被调用
    }
}

总结

  • 继承查找关系,从顶级父类开始,从上往下逐级加载
    • 父类静态代码块执行
    • 子类静态代码块执行
  • 调用子类构造器
    • 执行子类构造器方法体之前隐含的super()(初始化父类,调用父类构造器)
    • 执行子类构造代码块
    • 执行子类构造器方法体

在这里插入图片描述

  • Java岛冒险记【从小白到大佬之路】
  • LeetCode每日一题–进击大厂
  • 算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/1333.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入

“文心”取自《文心雕龙》一书的开篇,作者刘勰在书中引述了一个古代典故:春秋时期,鲁国有一位名叫孔文子的大夫,他在学问上非常有造诣,但是他的儿子却不学无术,孔文子非常痛心。 一天,孔文子在…

字节跳动软件测试岗,前两面过了,第三面HR天坑!竟然跟我说……

阎王易见,小鬼难缠。我一直相信这个世界上好人居多,但是也没想到自己也会在阴沟里翻船。我感觉自己被字节跳动的HR坑了。在这里,我只想告诫大家,offer一定要拿到自己的手里才是真的,口头offer都是不牢靠的,…

算法刷题总结 (四) 动态规划

算法总结4 动态规划一、动态规划1.1、基础问题11.1.1、509. 斐波那契数列1.1.2、70. 爬楼梯1.1.3、746. 使用最小花费爬楼梯1.2、基础问题21.2.1、62. 不同路径1.2.2、63. 不同路径Ⅱ1.2.3、64. 最小路径和1.2.4、343. 整数拆分1.2.5、96. 不同的二叉搜索树1.3、背包问题1.3.1、…

嵌入式学习笔记——STM32的时钟树

时钟树前言时钟树时钟分类时钟树框图LSI与LSEHSI、HSE与PLL系统时钟的产生举例AHB、APBx的时钟配置时钟树相关寄存器介绍1.时钟控制寄存器(RCC_CR)2.RCC PLL 配置寄存器 (RCC_PLLCFGR)3.RCC 时钟配置寄存器 (RCC_CFGR)4.RCC 时钟中断寄存器 (RCC_CIR)修改…

Java中的二叉树

文章目录前言一、树形结构(了解)1.1 概念1.2 概念(重要)1.3 树的表示形式(了解)1.4 树的应用二、二叉树(重点)2.1 概念2.2 两种特殊的二叉树2.3 二叉树的性质2.5 二叉树的存储2.5 二…

数据挖掘(2.2)--数据预处理

目录 二、数据描述 1.描述数据中心趋势 1.1平均值和截断均值 1.2加权平均值 1.3中位数(Median)和众数(Mode) 2.描述数据的分散程度 2.1箱线图 2.2方差和标准差 2.3正态分布 3.数据清洗 3.1数据缺失的处理 3.2数据清洗 二、数据描述 描述数…

【IDEA插件开发】环境搭建

基础信息 GRADLE 7.5.1 IDEA IntelliJ IDEA 2020.1.1 (Ultimate Edition) Build #IU-201.7223.91, built on April 30, 2020 Licensed to https://zhile.io You have a perpetual fallback license for this version Subscription is active until July 8, 2089 Runtime ve…

蓝桥杯嵌入式第一课--创建工程

概述学习本节之前,必须要先安装好 keil5 以及 CubeMX 等软硬件环境,如果你已经安装完成,请告诉自己:考试现在开始!从CubeMX开始CubeMX是创建工程模板的软件,也是我们比赛时第一个要进行操作的软件。一、选择…

【十二天学java】day01-Java基础语法

day01 - Java基础语法 1. 人机交互 1.1 什么是cmd? 就是在windows操作系统中,利用命令行的方式去操作计算机。 我们可以利用cmd命令去操作计算机,比如:打开文件,打开文件夹,创建文件夹等。 1.2 如何打…

介绍两款红队常用的信息收集组合工具

介绍两款红队常用的信息收集组合工具1.Ehole本地识别FOFA识别结果输出2.AlliN1.Ehole EHole(棱洞)3.0 红队重点攻击系统指纹探测工具 EHole是一款对资产中重点系统指纹识别的工具,在红队作战中,信息收集是必不可少的环节,如何才能从大量的资…

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(3)

写在前面: 怎么样才能学好一个算法? 我个人认为,系统性的刷题尤为重要, 所以,为了学好深度优先搜索,为了用好暴搜应对蓝桥杯, 事不宜迟,我们即刻开始刷题! 题目&…

Spring Cloud Alibaba全家桶(五)——微服务组件Nacos配置中心

前言 本文小新为大家带来 微服务组件Nacos配置中心 相关知识,具体内容包括Nacos Config快速开始指引,搭建nacos-config服务,Config相关配置,配置的优先级,RefreshScope注解等进行详尽介绍~ 不积跬步,无以至…

关于Linux多线程

文章目录Linux线程的概念什么是线程二级页表线程的优点线程的缺点线程异常线程用途Linux进程VS线程进程和线程进程的多个线程共享进程和线程的关系Linux线程控制POSIX线程库线程创建线程等待线程终止分离线程Linux线程的概念 什么是线程 在一个程序里的一个执行路线就叫做线程…

【Android WMS】从应用图像获取来认识WindowState

为了能够更动感的去学习WMS窗口概念,这里我们从应用的图像画面获取来认识WindowState,作为WMS学习的一个突破口,现在暂时记住下面这句话,WindowState是WMS中的一个对象,保存了APP窗口相关信息。保存了窗口相关信息&…

ACM训练赛赛后补题:Happy Necklace(思维+递推+矩阵快速幂)

题目描述: 分析 这道题很容易就可以定性为动态规划,需要能够推出递推公式;然后观察发现n太大了,最多只能接收O(logn)的复杂度,这样的复杂度,实现的方式就是矩阵快速幂。 首先题目所说的是这一串项链里面…

77.qt qml-QianWindow-V1版本界面讲解

上章介绍: 76.qt qml-QianWindow开源炫酷界面框架简介(支持白色暗黑渐变自定义控件均以适配) 界面如下所示: 代码结构如下所示:

大学四年..就混了毕业证的我,出社会深感无力..辞去工作,从头开始

时间如白驹过隙,一恍就到了2023年,今天最于我来说是一个值得纪念的日子,因为我收获了今年的第一个offer背景18年毕业,二本。大学四年,也就将就混了毕业证和学位证。毕业后,并未想过留在湖南,就回…

西安石油大学C语言期末重点知识点总结

大一学生一周十万字爆肝版C语言总结笔记 是我自己在学习完C语言的一次总结,尽管会有许多的瑕疵和不足,但也是自己对C语言的一次思考和探索,也让我开始有了写作博客的习惯和学习思考总结,争取等我将来变得更强的时候再去给它优化出…

计算机组成原理笔记——计算机性能指标(CPI、IPS、MIPS等)

计算机系统的性能评价有两种指标,分别为非时间指标和时间指标。 非时间指标 机器字长总线宽度主存容量、存储带宽CPU内核数 时间指标 主频、周频、外频、倍频CPI、IPCMIPS、MFLOPSCPU执行时间 非时间指标 (1)机器字长 机器一次能处理的二…

复制带随机指针的复杂链表

目录一、题目题目链接二、题目分析三、解题思路四、解题步骤4.1 复制结点并链接到对应原节点的后面4.2 处理复制的结点的随机指针random4.3 分离复制的链表结点和原链表结点并重新链接成为链表五、参考代码六、总结一、题目题目链接 ​​​​ ​ 题目链接:https://…