当前位置: 首页 > news >正文

Java:代码块 - 指南

文章目录

  • 一、介绍代码块
    • 1.1 静态代码块
    • 1.2 构造代码块
    • 1.3 构造器(构造方法)
  • 二、代码块的执行顺序
    • 2.1 无继承关系的执行顺序
    • 2.2 有继承关系的执行顺序
  • 三、总结
  • END

鸡汤:
● 一个人的代码,可以是 private的;但一个项目的成功,必须是 public的协作。
● 愿你的代码没有 BUG,愿你的程序永不下线。愿你的努力终将编译成功,运行出你想要的未来。加油,Java 人!

博客是一个将自己的知识输出的过程,如果只知道 copy 课件是起不到巩固知识的作用的,而这篇文章算是我第一次脱离课件的创作,只依靠了 AI 写的大纲,写的不好请见谅,我会一点点进步,与君共勉!!

一、介绍代码块

有没有想过一个问题,那就是当我们在实例化(new)一个对象的时候,我们究竟实例化了一些什么呢?他们又是按照什么顺序执行呢? 这里就要介绍我们今天的主角代码块了!!!

1.1 静态代码块

作用在类加载的时候执行,且只执行一次,用于初始化静态变量,如果第二次加载该类,将不会执行静态代码块。

语法:

static {
静态变量;
}

1.创建一个 demoClass 类

`在这里插入图片描述
2.当我们实例化两个 demoClass 对象会出现什么情况呢?

在这里插入图片描述

3.结果:

在这里插入图片描述

我们发现静态代码块只执行了一次,也就是 静态代码块只在实例化 c1 (第一次调用类)时执行了一次,之后再次调用 demoClass 类时,就不会再执行静态代码块。

1.2 构造代码块

作用:在​​每次创建对象​​、​​调用构造器之前​​执行 用于提取所有构造器的公共初始化代码。

语法:

{
构造代码块;
}

1. 在 demoClass 类中写入一个构造代码块
在这里插入图片描述
2.当我们实例化两个 demoClass 对象会出现什么情况呢?

在这里插入图片描述
3.结果:

在这里插入图片描述
我们发现构造代码块执行了两次,也就是 构造代码块在实例化 c1、c2时都被执行了一次,所以构造代码块在每实例化(new)对象的时候都要执行一次。

1.3 构造器(构造方法)

作用:在创建一个类的新对象时,自动调用该方法,用于初始化这个新对象。

语法:

Classname(类名) (参数) {
初始化代码;
}

1. 在 demoClass 类中写入一个不含参数的构造方法
在这里插入图片描述
2.当我们实例化两个 demoClass 对象会出现什么情况呢?

在这里插入图片描述
构造方法执行了两次,也就是 构造方法在实例化 c1、c2时都被执行了一次,所以构造方法在每实例化(new)对象的时候都要执行一次。

注:构造方法每个类都有,就算你没有显式的写构造方法,编辑器也会隐式的提供一个无参的构造方法。

二、代码块的执行顺序

那我们在想,在 new 一个对象的时候,static { }、{ }、构造方法,谁先执行?如果存在继承关系呢?

2.1 无继承关系的执行顺序

1.我们写一个无继承关系,有静态代码块、构造代码块和构造方法的代码

public class demoClass {
int a = 10;
String b = "hallo World";
public demoClass() {
//构造方法
System.out.println("调用了构造方法...");
System.out.println("结束构造方法...");
}
static {
//静态代码块
System.out.println("执行了静态代码块...");
System.out.println("结束静态代码块...");
}
{
//构造代码块
System.out.println("执行了构造代码块...");
System.out.println("结束构造代码块...");
}
}

2.实例化一个 demoClass 对象 c1

public class textClass {
public static void main(String[] args) {
demoClass c1 = new demoClass();
}
}

3.结果

在这里插入图片描述
从结果可以看出无继承关系的执行顺序为:静态代码块 -> 构造代码块 -> 构造器(构造方法)
在这里插入图片描述

2.2 有继承关系的执行顺序

1.我们写一个 demo 继承于 demoClass 类,demo 有自己的静态代码块、构造代码块和构造方法
注:为方便观察将结束语句删除

//父类代码
public class demoClass {
int a = 10;
String b = "hallo World";
public demoClass() {
//构造方法
System.out.println("调用了父类构造方法...");
}
static {
//静态代码块
System.out.println("执行了父类静态代码块...");
}
{
//构造代码块
System.out.println("执行了父类构造代码块...");
}
}
//子类代码
public class demo extends demoClass{
public demo() {
//构造方法
System.out.println("调用了子类构造方法...");
}
static {
//静态代码块
System.out.println("执行了子类静态代码块...");
}
{
//构造代码块
System.out.println("执行了子类构造代码块...");
}
}

2.实例化(new)一个 demo 对象,观察结果

在这里插入图片描述
3.结果

在这里插入图片描述
从结果可以看出有继承关系的执行顺序为:父类静态代码块 -> 子类静态代码块 -> 父类构造代码块 -> 父类构造器(父类构造方法) -> 子类构造代码块 -> 子类构造器(子类构造方法)

在这里插入图片描述

三、总结

做一个表格来总结一下这三种代码块:

特性构造代码块静态代码块构造器(构造方法)
语法{ /* 代码 */ }static { /* 代码 */ }ClassName() { /* 代码 */ }
执行时机每次创建对象时,在构造器​​之前​​执行类​​首次加载​​时执行(JVM类加载阶段)每次创建对象时执行
执行次数​每次new对象时执行一次整个程序运行期间​​只执行一次每次new对象时执行一次
主要作用提取多个构造器的公共初始化逻辑初始化静态变量初始化对象状态
JVM实现​被编译器合并到每个< init >方法开头生成独立的< clinit >方法,类加载时调用对应类的方法

注意⚠️:
● 静态代码块中不要初始化非静态成员。
● 谨慎在静态代码块中抛出异常。
● 构造代码块可用于减少构造器中的重复代码。


END

第一次脱离课件写博客,撒花
写的不好请见谅
写的第十六篇文章,感谢大家的观看!

http://www.jsqmd.com/news/13978/

相关文章:

  • 2025年冷却塔厂家最新权威推荐榜单:工业冷却塔、闭式冷却塔、横流式冷却塔、逆流式冷却塔专业制造商精选
  • 确实有新名字!硬件工具确认Intel Panther Lake:3个系列12个版本
  • SFT/DPO/PPO/GRPO训练全解析 - 指南
  • 2025年无锡公考考编培训机构最新权威推荐榜:事业单位/央企国企招录培训实力厂家精选指南
  • 2025年重庆短视频代运营与百度信息流推广公司综合推荐榜,拍摄/投流/获客/引流/剪辑/包年推广哪家好?
  • 2025年重庆短视频信息流投流/获客/巨量广告投放/拍摄/代运营推广公司推荐榜区域精选公司分享
  • 俄罗斯合作伙伴 Mobx,用 NocoBase 交付多场景方案
  • 2025年法兰罩厂家最新权威推荐榜:专业防护与精密制造,工业管道安全守护首选品牌
  • 2025 年公务员培训机构推荐榜:聚焦适配与服务,认准靠谱选择
  • IDM(Internet Download Managerv 6.38)破解版下载!IDM 下载器永久免费版!提升下载速度达5倍!安装及使用教程
  • 2025年数控滚齿机厂家最新权威推荐榜:高精度齿轮加工设备源头供应商,实力与口碑双重保障
  • 2025年太阳能板定制厂家终极推荐榜:揭秘 top 10 可靠选择
  • 2025 年蜂巢土工格室厂家推荐榜:HDPE土工格室/PP土工格室/PET土工格室/聚焦工程适配与品质保障,优选山东大成工程材料有限公司
  • 实用指南:是时候重启了:AIGC将如何重构UI设计师的学习路径与知识体系?
  • JavaScript 大纲
  • 2025年扒胎机厂家最新权威推荐榜:液压无损扒胎机,全自动扒胎机,汽保扒胎机,轮胎扒胎机,汽车扒胎机,大轮胎扒胎机,无损扒胎机,辽南扒胎机,小车扒胎机,立式扒胎机
  • 如何在AutoCAD中加载大型影像文件?
  • 2025年氧化镁厂家最新推荐排行榜,高纯氧化镁,活性氧化镁,医药级氧化镁,工业级氧化镁公司推荐
  • C 语言 - struct 关键字解析
  • 2025年阀门保温罩厂家最新推荐排行榜,工业阀门保温罩,管道阀门保温罩,定制阀门保温罩,高效节能阀门保温罩公司推荐
  • 10亿用户微博Feed流,如何 抵抗 100WQPS 热点 ?如何 抵抗雪崩 ?
  • 三大智能体开发平台详细对比:FastGPT、Dify和Coze
  • AI大模型学习路线:(非常详细)AI大模型学习路线,收藏这一篇就够了!
  • Gitee Insight领跑DevSecOps赛道:2025研发效能工具深度评测
  • 基于扩展卡尔曼滤波与无迹卡尔曼滤波的电力系统动态状态估计MATLAB实现
  • MySQL读写分离—— ProxySQL MyCAT ShardingSphere
  • 定时任务清除Windows服务器30天以上java系统日志
  • 中国研发效能工具市场迎来爆发期:头部厂商如何赋能企业数字化转型?
  • MATLAB GUI的通用视频处理
  • 一键生成毛茸萌宠形象,基于函数计算极速部署ComfyUI生图系统