代码块-Java

代码块-Java

  • 一、介绍
  • 二、语法
  • 三、好处
    • 举例
  • 四、使用细节
    • 1、static代码块/静态代码块,随着类的加载而执行,且只执行一次
    • 2、 类什么时候被加载 [重要 ! ]
      • 案例演示:static代码块
    • 3、普通代码块,在创建对象实例时,会被隐式的调用。
      • 案例演示:普通代码块

一、介绍

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

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

二、语法

	[修饰符] {代码};注意:修饰符可选,要写的话,也只能写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、static代码块/静态代码块,随着类的加载而执行,且只执行一次

static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象,就执行。

2、 类什么时候被加载 [重要 ! ]

① 创建对象实例时(new)
② 创建子类对象实例,父类也会被加载
③ 使用类的静态成员时(静态属性,静态方法)

案例演示:static代码块

① 创建对象实例时(new)

public class CodeBlockDetail01 {public static void main(String[] args) {A aa = new A();}
}class A {static {System.out.println("AA的静态代码块");}
}

在这里插入图片描述

② 创建子类对象实例,父类也会被加载

public class CodeBlockDetail01 {public static void main(String[] args) {B b = new B();}
}class A {static {System.out.println("父类A的静态代码块");}
}class B extends A {static {System.out.println("子类B的静态代码块");}
}

在这里插入图片描述

③ 使用类的静态成员时(静态属性,静态方法)
使用静态属性或者静态方法的时候,类已经加载

public class CodeBlockDetail01 {public static void main(String[] args) {//③ 使用类的静态成员时(静态属性,静态方法)System.out.println(Cat.n1);}
}
class Cat {public static int n1 = 999;static {System.out.println("cat 的静态代码块");}
}

在这里插入图片描述
static代码块/静态代码块,随着类的加载而执行,且只执行一次

public class CodeBlockDetail01 {public static void main(String[] args) {D d = new D();D d1 = new D();}
}
class D {static{System.out.println("DD的静态代码块");}
}

在这里插入图片描述

3、普通代码块,在创建对象实例时,会被隐式的调用。

普通代码块,在创建对象实例时,会被隐式的调用。每创建一次,就会调用一次。
如果只是使用类的静态成员时,普通代码块并不会执行。

案例演示:普通代码块

① 普通代码块,被创建一次,就会调用一次。

	//【main】D d = new D();D d1 = new D();class D {static{System.out.println("D的static静态代码块");}{System.out.println("D的普通代码块");}}

在这里插入图片描述
② 只是使用类的静态成员时,普通代码块并不会执行。
注意:静态代码块一定会执行。

	//【main】System.out.println(D.n2);class D {public static int n2 = 8888;static{System.out.println("D的static静态代码块");}{System.out.println("D的普通代码块");}}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV检测圆形东西是否存在缺口?

文章目录 前言一、试过的方法二、最终使用的方法1.先极坐标变换2.计算斜率 总结 前言 想了挺久,一直没解决这个问题。后面勉强解决了。 一、试过的方法 1.想用圆度来解决,后来发现圆度差值很小,完整的圆圆度0.89,然后有缺角的圆圆…

初学vue3与ts:setup与setup()下的数据写法

把setup写在script里 <template><div><div class"index-title">script setup</div><div class"title">字符串&#xff1a;</div><div class"title-sub">ref版&#xff1a;{{strRef}}</div><…

Vue3挂载完毕后,隐藏dom再重新加载组件的方法

组件原本是在PC端使用的&#xff0c;现在需要把组件再封装一次&#xff0c;供app调用&#xff0c;但是在app上会显示tag栏&#xff0c;有占位影响空间&#xff0c;所以需求去掉头部tag&#xff0c;只显示下方组件。 实现方法&#xff0c;以前是直接引用的组件&#xff0c;现在改…

minio客户端基本操作

minio客户端基本操作 桶 创建桶 如果要创建新的桶 输入名称&#xff0c;点击创建即可&#xff0c;默认权限就行 删除桶 点击要删除的桶 点击删除 修改桶 如果哪天需要修改桶的权限或者其他信息&#xff0c;还是先点击这个桶进入详情 然后点击要修改的属性&#xff0c;选择…

活动回顾|阿里云云原生 Serverless 技术实践营 深圳站回放PPT下载

11月24日“阿里云云原生 Serverless 技术实践营”深圳站圆满落幕。活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主&#xff0c;活动形式为演讲、动手实操&#xff0c;让开发者通过一个下午的时间增进对 Serverless 技术的理解&#xff0c;快速上手…

Fuzz进阶教学——人工智能在模糊测试中的应用

【参考文献】白海波.人工智能技术在模糊测试中的应用[J].数字技术与应用,2023,41(08):16-18.DOI:10.19695/j.cnki.cn12-1369.2023.08.05. 目录 摘要 一、模糊测试简介 1、原理 2、工作流程 3、分类 4、应用领域 二、人工智能在模糊测试中的应用 1、人工智能技术 2、人…

内衣洗衣机怎么选?内衣洗衣机便宜好用的牌子推荐

相信不少用户并不太在意衣服和内衣裤裤能不能同时洗&#xff0c;每次清洗都是把内衣裤与其他衣服一起放入洗衣机清洗&#xff0c;其实内衣裤不能直接跟大件的衣物一起放入洗衣机洗的&#xff0c;很容易会造成我们皮肤的瘙痒&#xff0c;我们大部分时间都在户外&#xff0c;暴露…

NineData:帮助开发者用好数据和云

导语 &#xff1a;数据库工具是指用于创建、设计、管理、开发、维护和优化数据库的一系列软件工具&#xff0c;包括数据库设计工具、数据库迁移与复制、数据库管理工具、数据安全工具等&#xff0c;这些工具可以帮助数据库管理员和开发人员更高效地管理、使用和开发数据库&…

嘴尚绝卤味添加草本物质的奥秘,让你品尝健康美味

每当提起卤味&#xff0c;相信很多人的口水都会开始分泌。确实&#xff0c;卤味作为一种深受人们喜爱的美食&#xff0c;其独特的口感和味道总是能够满足人们的味蕾。而在众多卤味品牌中&#xff0c;嘴尚绝卤味因其添加了草本物质而备受关注。那么&#xff0c;嘴尚绝卤味为什么…

Vue框架学习笔记-Object.defineproperty函数

文章目录 前文提要Object.defineProperty作用Object.defineProperty参数使用例图getter&#xff0c;也就是get函数setter&#xff0c;也就是set函数 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 Object.defineProperty作用 当在js中声明了一个变…

获取数据库中最占用内存的sql语句

SELECT TOP 20 total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数], qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)], last_execution_time AS [最后一次执行时间],min_worker_time /1000 AS [最小执行时间(ms…

推荐你一个基于Koin, Ktor Paging等组件的KMM Compose Multiplatform项目

推荐你一个基于Koin, Ktor & Paging等组件的KMM Compose Multiplatform项目 Kotlin Multiplatform Mobile&#xff08;KMM&#xff09;已经从一个雄心勃勃的想法发展成为一个稳定而强大的框架&#xff0c;为开发人员提供了在多个平台上无缝共享代码的能力。通过最近的稳定…