代码块和执行顺序

news2025/1/17 3:00:01

1、什么是代码块

使用{}定义的一段代码我们称之为代码块

一般分为:

1. 普通代码块

2. 实例代码块

3. 静态代码块

2、普通代码块

定义在方法中的代码块,可以用于限定局部变量的生命周期。

public class Main{
    public static void main(String[] args) {
        { //直接使用{}定义,普通方法块
            int x = 10 ;
            System.out.println("x1 = " +x);
        }
        int x = 100 ;
        System.out.println("x2 = " +x);
    }
}
// 执行结果
x1 = 10
x2 = 100

3、实例代码块

定义在类中的代码块

一般用于初始化实例成员变量

public class Student{
    //实例成员变量
    private String name;
    private String gender;
    private int age;
    private double score;
    public Student() {
        System.out.println("I am Student init()!");
    }
    //实例代码块
    {
        this.name = "bit";
        this.age = 12;
        this.sex = "man";
        System.out.println("I am instance init()!");
    }
    public void show(){
        System.out.println("name: "+name+" age: "+age+" sex: "+sex);
    }
}

public class Main {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.show();
    }
}


// 运行结果
I am instance init()!
I am Student init()!
name: bit age: 12 sex: man

4、静态代码块

使用static定义的代码块称为静态代码块。

一般用于初始化静态成员变量。

public class Student {
    private String name;
    private String gender;
    private int age;
    private double score;
    private static String classRoom;

    //实例代码块
    {
        this.name = "bit";
        this.age = 12;
        this.gender = "man";
        System.out.println("I am instance init()!");
    }

    // 静态代码块
    static {
        classRoom = "bit306";
        System.out.println("I am static init()!");
    }

    public Student() {
        System.out.println("I am Student init()!");
    }

    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
    }
}

注意:

1、静态代码块不管生成多少个对象,只会执行一次,并且是在类加载期间执行

2、静态代码块之间的执行顺序,是按照定义的顺序依次执行

3、实例代码块只会在实例化对象的时候执行,每次创建对象都会执行

5、试题

这个是牛客上面的一道题

首先执行的肯定是静态代码块,因为静态代码块是在类加载JVM时初始化,所以是最先执行的,但是由于B继承自A类,所以我们需要A类作为基础才能加载B类,也就是我们需要先加载父类A。加载完类之后,执行main函数,实例化对象B。由于子类无参构造器默认隐式调用父类构造器,所以会先执行父类的实例代码块和构造函数,然后执行子类的实例代码块和构造方法。

执行结果为:

class A static
class B static
I'm A class
class A
I'm B class
class B

小结:

  • 静态代码块:在类加载JVM时初始化,且只被执行一次;常用来执行类属性的初始化;静态块优先于各种代码块以及构造函数;此外静态代码块不能访问普通变量。
  • 实例代码块:每次调用构造方法,构造代码块都执行一次;实例代码块优先于构造函数执行;同时实例代码块的运行依赖于构造函数。

代码块初始化时机:构造代码块在实例对象创建时进行初始化;静态代码块在类加载时进行初始化。

代码块执行顺序:静态代码块 ==> main()方法 ==> 构造代码块 ==> 构造方法 ==> 局部代码块 。

继承中代码块执行顺序:父类静态块 ==> 子类静态块 ==> 父类代码块 ==> 父类构造器 ==> 子类代码块 ==> 子类构造器 。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【分享】百度更喜欢自媒体站,9种方法让你轻松玩转微博营销

微博营销是指通过微博平台为商家、个人等创造价值而执行的一种营销方式。 以下九种方式,你一定要学习一下,视频最后,有干货。 1、注重价值的传递 企业博客经营者首先要改变观念——企业微博的“索取”与“给予”之分,企业微博是…

2023你冲不冲,冲冲冲冲~~

前言:\textcolor{Green}{前言:}前言: 💞2022已经成为历史,趁着还没有遗忘来看看我这一年发生了什么事。 在这一年中有很多的收获也有一些遗憾,但是这不会让我停下来,未来的2023又会发生什么&…

ArcGIS 中的 7 种主要地理处理工具

地理处理工具可以提高人们的工作效率,并且这些工具可以批量应用于编辑,例如应用于所有功能或所有选定功能。本文将和大家一起探讨 7 个 ArcGIS 中的地理处理工具。 地理处理的用途 模型中的地理处理工具可解决许多空间完整性的问题,应用地理…

分布式缓存系统 Ignite、Hazelcast、Ehcache

一、Apache IgniteApache Ignite是一个以内存为中心的分布式数据库、缓存和处理平台,支持事务、分析以及流式负载,可以在PB级数据上享有内存级的性能。如果禁用原生持久化,Ignite就是一个分布式缓存,它实现了JCache规范&#xff0…

深入解析Linux虚拟化KVM-Qemu分析之中断虚拟化

说明: KVM版本:5.9.1QEMU版本:5.0.0工具:Source Insight 3.5, Visio 1. 概述 本文会将ARM GICv2中断虚拟化的总体框架和流程讲清楚,这个曾经困扰我好几天的问题在被捋清的那一刻,让我有点每有…

JsonUtility读写json简单应用

使用Unity提供的JsonUtility 简单封装了一个将数据以json格式存储到本地,方便数据读写的案例;一共三个脚本:MyJsonRW : 提供SaveJsonData和LoadWithJson,实现数据与json的转换和读写;TestData : 测试数据类,列举了部分常用的简单数据类型(不过有坑,后面会说);MyJsonExample : 例…

新诤信张强—兔年展望|2023-2025:看风的必不撒种、望云的必不收割

新诤信知识产权服务股份有限公司 首席技术官 张强 “看风的必不撒种、望云的必不收割”出自古老的犹太智慧书《传道书》,意思是,如果要等刮风才撒种,快要下雨才收割,一切就都来不及了。元宇宙的发展布局,也是这个道理…

基础算法[四]之图的那些事儿

文章目录前言图的表示邻接矩阵邻接表结构存储遍历路径搜索多源最短路问题问题描述Floyd实现模板单源最短路径问题Dijkstra算法朴素版本堆优化邻接表python实现Bellman-Ford 算法实现SPFA 算法实现python 版本判断负环小结最小生成树Prim算法Kruskra算法实现python版本二分图二分…

网络资源归档标准WARC介绍

WARC---Web ARChive 01 ● WARC格式概述 ● WARC(Web ARChive)格式是网络资源存档中使用的常见文件格式,全称为Web Archive File Format,由互联网保存联盟(International Internet Preservation Consortium&#xff0…

2023年1月6日星期五-PPP/BPP相关学习

独立均匀分布matlab的rand指令可以帮助我们生成[0,1]的均匀分布的数据,这样,如果我们想要[a,b]的分布数据,只需要a+(b-a)*rand就可以了。 [a,b] 均值,标准差 均值

Git 常用基本命令

文章目录基本命令仓库相关命令提交相关命令分支相关命令tag 相关命令撤销相关命令IDEA Git 相关操作仓库相关操作提交相关操作提交代码步骤分支相关操作tag 相关操作撤销相关操作参考资料本文主要介绍 Git 常用的基本命令。基本命令 仓库相关命令 创建新仓库 git init克隆项…

C#,图像二值化(15)——全局阈值的一维最大熵(1D maxent)算法及源程序

1、最大熵(maxent) 最大熵(maxent)方法植根于信息理论,并已成功应用于许多领域,包括物理学和自然语言处理。它创建了一个模型,该模型最好地解释了可用数据,但有一个约束&#xff0c…

甘特图中的依赖关系是什么?

依赖关系是甘特图应用中常见的概念。甘特图依赖关系也称为任务依赖关系,它是指项目任务之间的关系,需要按特定顺序执行一个或多个任务才能完成某项任务,依赖于完成前一任务的任务是后继任务,而其依赖的任务是前导任务。依赖关系一…

字典特征提取、文本特征提取、jieba分词处理、tf-idf文本特征提取概念及代码实现

一、特征提取 特征提取:将任意数据(如文本或图像)转换为可用于机器学习的数字特征,特征值化是为了计算机更好的去理解数据 特征提取api:sklearn.feature_extraction 特征提取分类 字典特征提取(特征离散化)文本特征…

小蓝本 第一本《因式分解技巧》 第九章 待定系数法 笔记 (第九天)

小蓝本 第一本《因式分解技巧》 第九章 待定系数法 笔记 (第九天)前言待定系数法二次因式一次因式分解缺陷二次因式分解方法注意既约的情况拓展习题9题目题解前言 已经进行了9天,第八章有一点烧脑,但感觉还是很不错的&#xff0c…

Python类继承:深入了解

引言 前段时间刚好学习了,C中类方面的内容,发现和Python中有许多不同之处,尤其是在类的继承这一块,今天有空,正好写篇文章,记录一下有兴趣的东西,也算是对Python的一个复习。 1 C中的构造析构函…

设计模式学习(二):Observer观察者模式

一、什么是Observer模式在Observer模式中,当观察对象的状态发生变化时,会通知给观察者。Observer模式适用于根据对象状态进行相应处理的场景。简单一句话概况就是:观察者会发送观察对象状态变化的通知。二、Observer模式示例代码下面示例程序…

10种顶流聚类算法Python实现(附完整代码)

目录 前言 一、聚类 二、聚类算法 三、聚类算法示例 1、库安装 2、聚类数据集 3、亲和力传播 4、聚合聚类 5、BIRCH 6、DBSCAN 7、K均值 8、Mini-Batch K-均值 9、均值漂移聚类 10、OPTICS 11、光谱聚类 12、高斯混合模型 三、总结 前言 今天给大家分享一篇关…

虚幻五引擎的出现会不会导致技术美术需求的下降?

先来结论:不会,虚幻五引擎的出现反而会致使技术美术需求的增加。 UE5主要引入的两大新技术 Nanite ​ 渲染技术Nanite,能够直接在游戏里表现出影视级别的超高精度模型。在演示中有一个古代雕塑的镜头,使用的模型超过3300万多边形…

Spring MVC阶段测试

Spring MVC阶段测试 1.新建Maven项目,静态资源文件,如JS、CSS、图片应存放在( C )目录下。 A、src/main/java B、src/test/java C、src/main/resources/static D、src/main/resources/templates 2.新建Maven项目&#xff0c…