JavaSE——面向对象9.1:代码块详解

news2024/10/10 15:43:04

目录

一、静态代码块

二、构造代码块

三、局部代码块

四、总结


一、静态代码块

        在《JavaSE——面向对象9:static、final关键字、代码块、单例模式》这篇文章中已经介绍过,静态代码块随着类的加载而加载,且只加载一次,这里不再赘述。

static {
        System.out.println("静态代码块执行了...");
    }

二、构造代码块

        创建一个Baby对象,希望无论调用Baby对象的哪一个构造方法之前,都要执行cry和eat方法,下面是传统写法,在每个构造器中传入cry()和eat(),代码重复性高,冗余。

        构造代码块可以很好地解决这个问题。

public class TestDemo4 {
    public static void main(String[] args) {
        Baby baby = new Baby();
        // baby cry
        // baby eat
        // 无参构造器执行了...
        Baby baby1 = new Baby("jack", 2);
        // baby cry
        // baby eat
        // 有参构造器Baby(String name, int age)执行了...
    }
}

class Baby {
    private String name;

    private int age;

    private char gender;

    public Baby() {
        this.cry();
        this.eat();
        System.out.println("无参构造器执行了...");
    }

    public Baby(String name, int age) {
        this.cry();
        this.eat();
        this.name = name;
        this.age = age;
        System.out.println("有参构造器Baby(String name, int age)执行了...");
    }

    public Baby(String name, int age, char gender) {
        this.cry();
        this.eat();
        this.name = name;
        this.age = age;
        this.gender = gender;
        System.out.println("有参构造器Baby(String name, int age, char gender)执行了...");
    }

    public void cry() {
        System.out.println("baby cry");
    }

    public void eat() {
        System.out.println("baby eat");
    }
}

        我们可以将构造器中重复的代码抽出来,放入构造代码块中,代码运行结果是一样的,代码如下:

class Baby {
    private String name;

    private int age;

    private char gender;
    {
        System.out.println("构造代码块执行了...");
        this.cry();
        this.eat();
    }
    public Baby() {
        System.out.println("无参构造器执行了...");
    }

    public Baby(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("有参构造器Baby(String name, int age)执行了...");
    }

    public Baby(String name, int age, char gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        System.out.println("有参构造器Baby(String name, int age, char gender)执行了...");
    }

    public void cry() {
        System.out.println("baby cry");
    }

    public void eat() {
        System.out.println("baby eat");
    }
}

运行结果: 

小结:

  1. 构造代码块定义在类中,方法外的{}中;
  2. 构造代码块是构造器的补充;
  3. 将构造器中重复的代码抽取到构造代码块中,能够提高代码的复用性;
  4. 在创建对象时,构造代码块总是先于构造器执行。

三、局部代码块

        局部代码块的位置在方法体中,可以提高栈内存的利用率。局部代码块在方法被调用时执行(根据调用的顺序)。

        比如int a = 10;这段代码,只要main方法没有执行完毕,它会一直存在于内存中,为了节约内存,我们可以把它放在局部代码块中,当这段局部代码块执行完毕后,该变量就可以被回收了。

public class TestDemo4 {
    public static void main(String[] args) {
        {
            int a = 10;
        }
    }
}

四、总结

加上构造器,静态代码块、构造代码块、构造器、局部代码块的执行顺序:

  1. 静态代码块执行(只执行一次,类加载时)。
  2. 实例代码块执行(每次创建对象时)。
  3. 构造方法执行。
  4. 局部代码块在方法被调用时执行(根据调用的顺序)。

        这种顺序保证了类的静态部分在任何对象创建之前被初始化,而实例部分在每个对象创建时初始化。局部代码块则依赖于具体的调用。

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

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

相关文章

【优选算法】---分治 归并排序

分治 归并排序 一、排序数组 / 归并排序的复习1、题目解析2、算法原理3、代码 二、逆序对的总数1、题目解析2、算法原理3、代码 三、计算右侧小于当前元素的个数1、题目解析2、算法原理3、代码 四、翻转对1、题目解析2、算法原理3、代码 一、排序数组 / 归并排序的复习 归并排…

Windows下Jenkins控制台中文乱码

问题描述 问题情况如下图: 环境信息 Windows 11 家庭中文版java 21.0.4 2024-07-16 LTSJenkins 2.452.3 解决方法 增加系统JAVA_TOOL_OPTIONS,并设置值为-Dfile.encodingGBK。 打开设置方法:桌面上右键点击“此电脑”图标,选…

软考高级之系统架构师之计算机硬件基础

概述 局部性原理是指在指定时间内,程序趋于在有限的内存区域内重复访问。通常将局部性分为空间局部性和时间局部性。空间局部性是指已访问过的内存地址附近的位置很可能被连续访问。时间局部性是指已访问过的内存地址在较短的时间内还可能被多次访问。 计算机执行…

请散户股民看过来,密切关注两件大事

明天股市要开市,不仅散户股民期盼节后股市大涨,上面也同样想在节后来上一个“开门红”。 为此,上面没休假,关起门来办了两件大事,这两天发布消息已提前预热了。 两件大事如下: 一是,上交所10…

柯桥生活口语学习之在化妆品店可以用到的韩语句子

화장품을 사고 싶어요. 我想买化妆品。 어떤 화장품을 원하세요? 您想买什么化妆品。 스킨로션을 찾고 있어요. 我想买化妆水,乳液。 피부 타입은 어떠세요? 您是什么皮肤类型? 민감성 피부예요. 我是敏感性皮肤。 평소에 쓰시는 제품은 뭐예…

【判断推理】逻辑基础

1.1 命题 用语言、符号或者式子表达的,可以判断真假的陈述句称为命题,一般写为 若p,则q 真命题:判断为真的语句假命题:判断为假的语句 eg1:小张是中国人(若是小张,则是中国人&#…

【传感器技术】【9 温度测量,热电偶传感器,膨胀式温度传感器,压力测量,弹性式压力表】

上理考研周导师的哔哩哔哩频道 我在频道里讲课哦 目录 9.1、 温度概述 1. 温度与温标 2. 温度测量的主要方法和分类 9.2、 膨胀式温度传感器 1. 液体膨胀式 2. 固体膨胀式 3. 气体膨胀式 9.3、 热电偶传感器 1. …

Cesium的一些神奇概念及技术流程(1)

近期要深度研究Cesium。关于Cesium的用法、渲染流程等方面我看很多人都写过。我就写写其中一些可能平时用不到但是比较有趣的内容。因为边研究边写,所以会陆续出几集,然后合并在一起,欢迎大家跟踪。 我的这些文章不打算把一些基本概念展开解…

OJ在线评测系统 微服务 OpenFeign调整后端上 内部调用Client代码书写 实现客户端接口 配置服务参数 接口文档

OpenFeign内部调用上 我们的代码已经搬运完毕了 但是我们的服务之间是无法相互调用的 我们可以使用OpenFeign进行远程调用 一个http调用客户端 提供了更方便的方式让你远程调用其他的服务 Nacos注册中心获取服务的调用地址 如果没有实现OpenFeign 也能实现跨服务的调用 …

Windows 11 version 24H2 LTSC 2024 中文版、英文版 (x64、ARM64) 下载 (updated Oct 2024)

Windows 11 version 24H2 & LTSC 2024 中文版、英文版 (x64、ARM64) 下载 (updated Oct 2024) Windows 11, version 24H2,企业版 arm64 x64 请访问原文链接:https://sysin.org/blog/windows-11/ 查看最新版。原创作品,转载请保留出处。…

出国必备神器!这5款中英翻译工具让你秒变外语达人

在这个全球化的时代,中英互译已然成为我们日常生活和工作中不可或缺的一环。面对众多的翻译工具,如何选择一款既高效又人性化的翻译助手呢?今天,就让我为大家揭秘几款热门的中英互译工具,并分享我的使用感受。 一、福昕…

【数据结构与算法】线性表

文章目录 一.什么是线性表?二.线性表如何存储?三.线性表的类型 我们知道从应用中抽象出共性的逻辑结构和基本操作就是抽象数据类型,然后实现其存储结构和基本操作。下面我们依然按这个思路来认识线性表 一.什么是线性表? 定义 线性…

【项目记录】大模型基于llama.cpp在Qemu-riscv64向量扩展指令下的部署

概述 本文在qemu-riscv64平台上,利用向量扩展指令加速运行基于llama.cpp构建的大模型。 参考博客链接: Accelerating llama.cpp with RISC-V Vector Extension 基于RVV的llama.cpp在Banana Pi F3 RISCV开发板上的演示 llama.cpp工程 Llama.cpp是一个基…

C语言-指针变量,常量与数组名的细微区别辨析

本节根据两个选择题进行展开辨析 一、例1 本题答案:C 解析:强干扰选项是B,我相信大多数同学都会在B,C之间犹豫好久,那么为什么答案会最终选择C呢?因为本题在定义函数,所以a首先是一个数组名&a…

【学习笔记】一种使用多项式快速计算 sin 和 cos 近似值的方法

一种使用多项式快速计算 sin 和 cos 近似值的方法 在嵌入式开发、游戏开发或其他需要快速数学计算的领域,sin 和 cos 函数的计算时间可能会影响程序的整体性能。特别是在对时间敏感、精度要求不高的场景中,传统的 sin 和 cos 函数由于依赖复杂的数值方法…

SOMEIP_ETS_168: SD_TestFieldUINT8Reliable

测试目的: 验证DUT能够通过Getter和Setter方法正确地发送和接收TestFieldUINT8Reliable字段的值,并且这些操作是可靠的。 描述 本测试用例旨在确保DUT的ETS能够响应Tester的请求,正确地使用Getter方法获取TestFieldUINT8Reliable的值&…

【MySQL必知会】事务

目录 🌈前言🌈 📁 事务概念 📁 事务操作 📁 事务提交方式 📁 隔离级别 📁 MVCC 📂 3个隐藏列字段 📂 undo日志 📂 Read View视图 📁 RR和R…

分治算法(5)_归并排序_排序数组

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 分治算法(5)_归并排序_排序数组 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 …

JavaSE——面向对象11:内部类(局部内部类、匿名内部类、成员内部类、静态内部类)

目录 一、内部类基本介绍 (一)内部类定义 (二)内部类基本语法 (三)内部类代码示例 (四)内部类的分类 二、局部内部类 三、匿名内部类(重要) (一)基本介绍 (二)基于接口的匿名内部类 (三)基于类的匿名内部类 (四)注意事项与使用细节 (五)匿名内部类的最佳实践——当…