代码块01-Java

代码块01

  • 一、介绍
  • 二、语法
  • 三、好处
    • 举例
  • 四、使用细节
  • 五、练习
    • 题1
    • 题2

一、介绍

代码块又称为初始化块,属于类中的成员[即是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过包围起来。

但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。

二、语法

	[修饰符] {
		代码
	};
	
	注意:修饰符可选,要写的话,也只能写static
  1. 修饰符可选,要写的话,也只能写static。
  2. 代码块分为两类,使用static修饰的叫静态代码块,没有static修饰的,叫普通代码块。
  3. 逻辑语句可以为任何逻辑语句(输入、输出、方法调用、循环、判断等)
  4. 分号 ; 号可以写上,也可以省略。

三、好处

  1. 相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化的操作。
  2. 如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性
  3. 代码块调用的顺序优先于构造器

举例

代码块的快速入门 CodeBlock01.java

class Movie {
    private String name;
    private double price;
    private String director;
    //  三个构造器->构成重载

    public Movie(String name) {
        System.out.println("电影屏幕打开……");
        System.out.println("广告开始……");
        System.out.println("电影正式开始……");
        this.name = name;
    }

    public Movie(String name, double price) {
        System.out.println("电影屏幕打开……");
        System.out.println("广告开始……");
        System.out.println("电影正式开始……");
        this.name = name;
        this.price = price;
    }

    public Movie(String name, double price, String director) {
        System.out.println("电影屏幕打开……");
        System.out.println("广告开始……");
        System.out.println("电影正式开始……");
        this.name = name;
        this.price = price;
        this.director = director;
    }
}

可以看到在每一个构造器中都有同样的代码
把相同的语句放在一个代码块中即可

    {
        System.out.println("电影屏幕打开……");
        System.out.println("广告开始……");
        System.out.println("电影正式开始……");
    }
    //这样不管调用哪一个构造器创建对象,都会先调用代码块
    public Movie(String name) {
        System.out.println("public Movie(String name)");
        this.name = name;
    }

    public Movie(String name, double price) {
        System.out.println("public Movie(String name, double price)");
        this.name = name;
        this.price = price;
    }

    public Movie(String name, double price, String director) {
        System.out.println("public Movie(String name, double price, String director)");
        this.name = name;
        this.price = price;
        this.director = director;
    }

在这里插入图片描述

(1) 不管调用哪个构造器创建对象,都会先调用代码块
(2) 代码块调用的顺序优先于构造器

四、使用细节

见上篇

五、练习

做题前先看代码块的使用细节。

题1

下面的代码输出什么?

class Person {
	public static int total;
	static {
		total = 100;
		System.out.println("in static block!");
	}
}

public class Test {
	public static void main(String[] args) {
		System.out.println("total = "+Person.total);
		System.out.println("total = "+ Person.total);
	}
}

我的答案:
in static block!
total = 100
total = 100

正确。
在这里插入图片描述

分析:① 直接访问类的静态成员(变量和方法)会使得类加载。类加载的时候静态代码块&静态变量初始化会执行。
② 静态代码块只在类加载的时候执行一次。

题2

public class CodeBlockExercise02 {
    public static void  main(String  str[])
    {
        Test a = new Test();//无参构造器
    }
}

class Sample
{
    Sample(String s)
    {
        System.out.println(s);
    }
    Sample()
    {
        System.out.println("Sample默认构造函数被调用");
    }
}
class Test{
    Sample sam1=new Sample("sam1成员初始化");//
    static Sample sam=new Sample("静态成员sam初始化 ");//
    static{
        System.out.println("static块执行");//
        if(sam==null)System.out.println("sam is null");
    }
    Test()//构造器
    {
        System.out.println("Test默认构造函数被调用");//
    }
}

我的答案:
(类加载)
静态成员sam初始化
static块执行
(new)
sam1成员初始化(普通变量)
Test默认构造函数被调用(构造器)

正确。
在这里插入图片描述

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03

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

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

相关文章

2023年【起重机械指挥】考试题库及起重机械指挥考试资料

题库来源:安全生产模拟考试一点通公众号小程序 2023年【起重机械指挥】考试题库及起重机械指挥考试资料,包含起重机械指挥考试题库答案和解析及起重机械指挥考试资料练习。安全生产模拟考试一点通结合国家起重机械指挥考试最新大纲及起重机械指挥考试真…

每天学习一点点之从 Control character in cookie value or attribute 异常看 Cookie 字符编码限制

文章开头,感谢 浩哥 在问题排查中的帮助。 背景 昨天,我们接到了来自其他团队的反馈,他们表示在访问我们的服务时,偶尔会遇到 HTTP 500 错误。清除 Cookie 后,服务又恢复正常。根据我们现有的异常处理机制&#xff0…

房屋租赁出售经纪人入驻小程序平台

一款专为房屋中介开发的小程序平台,支持独立部署,源码交付,数据安全无忧。 核心功能:房屋出租、经纪人独立后台、分佣后台、楼盘展示、房型展示、在线咨询、地址位置配套设施展示。 程序已被很多房屋交易中介体验使用过&#x…

华为鸿蒙开发(HarmonyOs开发):超详细的:DevEco Studio 的安装和配置 、华为第三方包依赖:SDK软件包的安装、Nodejs的导入配置

2023年11月28日20:00:00 ⚠️⚠️HarmonyOs 开发工具 ⚠️⚠️ ⚠️⚠️DevEco Studio 的安装和配置⚠️⚠️ 文章目录 一、打开鸿蒙开发工具官网二、下载 DevEco Studio三、配置 DevEco Studio四、错误处理 ⚠️⚠️⚠️❤️❤️ 关注了解更多 一、打开鸿蒙开发工具官网 下面…

可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器

可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器 文章目录 可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器1. 简介2. 软件下载安装:3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 …

美团2023年Q3财报:营收765亿元 即时零售订单量增至62亿笔

11月28日,美团(股票代码:3690.HK)发布2023年第三季度业绩,公司当季收入765亿元(人民币,下同),较去年同比增长22.1%。基于提质增效的经营策略,主体业务表现稳固健康,带动公司整体经调整净利润为57.3亿元。 …

VAE模型及pytorch实现

VAE模型及pytorch实现 VAE模型推导部分最小化KL散度推导代码部分损失函数Encoder部分Decoder部分VAE整体架构 VAE问题参考资料 VAE(变分自编码器)是一种生成模型,结合了自编码器和概率图模型的思想。它通过学习数据的潜在分布,可以…

【数据库】基于排序算法的去重,集合与包的并,差,交,连接操作实现原理,执行代价以及优化

基于两趟排序的其它操作 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏…

跨标签页通信的8种方式(下)

跨标签页通信是指在浏览器中的不同标签页之间进行数据传递和通信的过程。在传统的Web开发中,每个标签页都是相互独立的,无法直接共享数据。然而,有时候我们需要在不同的标签页之间进行数据共享或者实现一些协同操作,这就需要使用跨…

C语言——字符函数和字符串函数(上)

在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语⾔标准库中提供了⼀系列库函数,接下来我们就学习⼀下这些函数。 一、 字符分类函数 C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字…

AI Agent应用落地前半场,属于企服软件厂商推出的平台级AI智能体

GPTs大受欢迎但问题多,企服厂商的AI Agent更被B端客户器重 比尔盖茨预言智能体是下个平台,超自动化平台的AI Agent更靠谱? 以GPTs为代表的AI Agent只是玩具?揭秘真实可用AI智能体长什么样 AI Agent应用落地前半场,属…

mysql处理40w数据脚本执行慢问题

需求背景: 2张表 SS_ZYXX 1w数据,WD_GZPZ 50w数据 SS_ZYXX.id WD_GZPZ.zyxx_id 找到SS_ZYXX表有数据,关联表WD_GZPZ没有数据的SS_ZYXX表的id 处理方案 方案一: 联合查询: 下面sql,在mysql执行时间3…

基于Python的网络爬虫设计与实现

基于Python的网络爬虫设计与实现 摘要:从互联网时代开始,网络搜索引擎就变得越发重要。大数据时代,一般的网络搜索引擎不能满足用户的具体需求,人们更加注重特定信息的搜索效率,网络爬虫技术应运而生。本设计先对指定…

[栈迁移+ret滑梯]gyctf_2020_borrowstack

题目来源buuctf——gyctf_2020_borrowstack 参考链接https://www.shawroot.cc/2097.html 题目信息ubuntu16、64位 第一个read仅溢出一个机器字长,需要栈迁移 解题步骤栈偏移到全局变量bank中,ret2libcgadget 关键步骤 ret滑梯 第二个payload需要添…

内网隧道学习

默认密码:hongrisec2019 一.环境搭建 网卡学习 一个网卡一个分段,想象成一个管道 192.168.52一段 192.168.150一段 仅主机模式保证不予外界连通,保证恶意操作不会跑到真实机之上 52段是内部通信,150段属于服务器(…

深入理解强化学习——马尔可夫决策过程:备份图(Backup Diagram)

分类目录:《深入理解强化学习》总目录 在本文中,我们将介绍备份(Backup)的概念。备份类似于自举之间的迭代关系,对于某一个状态,它的当前价值是与它的未来价值线性相关的。 我们将与下图类似的图称为备份图…

sping boot的配置文件application.properties乱码

1.问题描述 查看spingboot项目中的配置信息,即查看application.properties文件,它出现乱码 2.解决问题 File->Settings->Editor->File Encodings 3.验证是否解决乱码

三维gis中用纹理限定多边形地理区域

在三维 gis 中经常需要在指定的多边形地理范围内做一些操作,比如地形的多边形裁剪、压平多边形区域内的倾斜摄影模型、在指定地理范围内绘制等间距的点等。这都涉及到限定多边形区域的问题。 所谓的限定多边形地理区域,核心问题在于判断某个片元是否处于…

如何获取高质量的静态住宅IP代理?常见误区与注意事项

静态住宅IP代理在今天的网络营销领域扮演着至关重要的角色,静态住宅IP代理以其稳定性和高匿名性,为互联网业务提供了一个安全的执行环境。通过模拟真实用户的网络行为,这些IP代理降低了企业在网络营销活动中被识别和封禁的风险。它保护了企业…

this.$refs,salesRankRefjj.searchRankCall is not a function

在vue项目中,在父组件使用$refs获取不到子组件的方法,为什么? 我的报错如下: [Vue wamn]: Error in v-on handler: "TypeError: this.$refs,salesRankRefjj.searchRankCall is not a function found in 代码如下&#xff1a…