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

Java代码块

🧠 Java 代码块概述

在 Java 中,代码块(Code Block) 是用 {} 括起来的一段代码。根据其用途和执行时机的不同,可以分为以下几类:

  • 普通代码块
  • 构造代码块
  • 静态代码块
  • 同步代码块(多线程中使用)

1️⃣ 普通代码块(Local Code Block)

✅ 定义:

定义在方法内部的代码块,用于限制变量的作用域或组织逻辑。

⏱ 执行时机:

当程序运行到该代码块时执行。

🔁 特点:

  • 变量只在代码块内有效
  • 多次调用方法会多次执行

💡 示例代码:

public class Demo {public static void main(String[] args) {{int x = 10;System.out.println("x = " + x);}// System.out.println(x); // 编译错误:x不可见}
}

2️⃣ 构造代码块(Instance Initialization Block)

✅ 定义:

定义在类中、方法外的代码块,没有 static 关键字修饰。

⏱ 执行时机:

每次创建对象时,在调用构造函数之前执行。

🔁 特点:

  • 可以对对象进行统一初始化
  • 多个构造器共用,避免重复代码

💡 示例代码:

public class Person {{System.out.println("构造代码块执行");}public Person() {System.out.println("无参构造器执行");}public Person(String name) {System.out.println("带参构造器执行:" + name);}
}// 测试类
public class Test {public static void main(String[] args) {new Person();new Person("Tom");}
}

📌 输出结果:

构造代码块执行
无参构造器执行
构造代码块执行
带参构造器执行:Tom

3️⃣ 静态代码块(Static Initialization Block)

✅ 定义:

使用 static 修饰的代码块,定义在类中、方法外。

⏱ 执行时机:

在类第一次被加载时执行,且仅执行一次。

🔁 特点:

  • 用于类级别的初始化操作(如加载驱动、读取配置文件)
  • 先于构造代码块和构造器执行
  • 多个静态代码块按书写顺序执行

💡 示例代码:

public class Animal {static {System.out.println("静态代码块执行");}{System.out.println("构造代码块执行");}public Animal() {System.out.println("Animal构造器执行");}
}// 测试类
public class Test {public static void main(String[] args) {new Animal();new Animal(); // 第二次不会执行静态代码块}
}

📌 输出结果:

静态代码块执行
构造代码块执行
Animal构造器执行
构造代码块执行
Animal构造器执行

4️⃣ 同步代码块(Synchronized Block)

✅ 定义:

用于多线程环境下控制线程同步,防止多个线程同时访问共享资源。

💡 示例代码:

public class Counter {private int count = 0;public void increment() {synchronized (this) {count++;}}public int getCount() {return count;}
}// 多线程测试
public class Test {public static void main(String[] args) throws InterruptedException {Counter counter = new Counter();Thread t1 = new Thread(() -> {for (int i = 0; i < 1000; i++) {counter.increment();}});Thread t2 = new Thread(() -> {for (int i = 0; i < 1000; i++) {counter.increment();}});t1.start();t2.start();t1.join();t2.join();System.out.println("最终计数: " + counter.getCount());}
}

📌 输出结果:

最终计数: 2000

🔄 总结:各种代码块执行顺序

在一个类中,不同代码块的执行顺序如下:

  1. 静态代码块(类加载时执行,仅一次)
  2. 构造代码块(每次实例化前执行)
  3. 构造器(具体构造方法)
  4. 局部代码块(方法中定义,按顺序执行)

📝 应用场景建议

类型场景说明
普通代码块控制变量作用域、简化逻辑结构
构造代码块对象初始化,多个构造器复用代码
静态代码块加载驱动、配置文件、静态资源
同步代码块多线程下保证线程安全

✅ 小贴士

  • 一个类可以有多个静态代码块和构造代码块。
  • 静态代码块不能访问非静态成员。
  • 构造代码块可以访问静态和非静态成员。
  • 静态代码块 > 构造代码块 > 构造器
http://www.xdnf.cn/news/15184.html

相关文章:

  • Android 应用常见安全问题
  • JAVA JVM对象的实现
  • 【spring boot】三种日志系统对比:ELK、Loki+Grafana、Docker API
  • 长效住宅代理IP:反爬虫战场上的隐形盾牌
  • 代码随想录17|二叉树的层序遍历|翻转二叉树|对称二叉树
  • Java入门之JDK下载和安装
  • HTTP 错误 500.19 - 打开 IIS 网页时出现内部服务器错误
  • Windows Edge 播放 H.265 视频指南
  • 自动化测试策略设计和避坑概要
  • 图解Java数据容器(三):Queue
  • imx6ull-裸机学习实验16——I2C 实验
  • 【C++】第十四节—模版进阶(非类型模版参数+模板的特化+模版分离编译+模版总结)
  • Vue响应式原理五:响应式-自动收集依赖
  • 第七讲:C++中的string类
  • 分布式ID方案
  • 羊肚菌自动采收车设计cad【7张】+三维图+设计说明书
  • 什么?不知道 MyBatisPlus 多数据源(动态数据源)干什么的,怎么使用,看这篇文章就够了。
  • 目标检测中的评价指标计算
  • 从零搭建多商户商城系统源码:技术栈、数据库设计与接口规划详解
  • 好用研发项目管理软件对比:8Manage PM与飞书功能深度测评
  • 【网络安全】利用 Cookie Sandwich 窃取 HttpOnly Cookie
  • Canvas 状态管理 语法糖 canvas.withSave() {}
  • Houdini 分布式解算效率瓶颈突破:渲染 101 云集群实战指南
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_keepalive_probes
  • Docker 镜像加速站汇总与使用指南
  • GitHub上优秀的开源播放器项目介绍及优劣对比
  • iOS APP混合开发性能测试怎么做?页面卡顿、通信异常的工具组合实战
  • Apache Shiro 框架详解
  • K线连续涨跌统计与分析工具
  • 3D Surface Reconstruction with Enhanced High-Frequency Details