1 引言

代码块是类的成分之一:成员变量,方法,构造器,代码块,内部类。

在Java中,使用 { } 括起来的代码被称为代码块(Code block)

1.1 代码块的分类

根据其位置和声明的不同,可以分为:

  • 局部代码块:用于限定变量生命周期,及早释放,提高内存利用率。
  • 静态代码块:主要用于对静态属性进行初始化。
  • 实例(构造)代码块:调用构造方法都会执行,并且在构造方法前执行。
  • 同步代码块:一种多线程保护机制。

2 局部代码块

在方法中出现,可以限定变量生命周期,及早释放,提高内存利用率。

2.1 示例代码

public class Test1{public static void main(String[] args) {//局部代码块{int n = 100;}// 局部代码块中声明的变量在代码块外部访问不到!// System.out.println(n);}
}

3 静态代码块

必须有static修饰,必须放在类下。与类一起加载执行。并且静态代码块执行一次

3.1 示例代码

public class Test2 {public static String name;// 静态代码块static {// 初始化静态资源name = "张三";System.out.println("静态代码块执行...");}public static void main(String[] args) {System.out.println("main方法执行...");System.out.println(name);}
}

输出

静态代码块执行...
main方法执行...
张三

3.2 特点

  • 每次执行类,加载类的时候都会先执行静态代码块一次。
  • 静态代码块是自动触发执行的,只要程序启动静态代码块就会先执行一次。
  • 在启动程序之前可以做资源的初始化,一般用于初始化静态资源。

4 实例代码块(构造代码块)

没有static修饰,必须放在类下。与对象初始化一起加载,即每次调用构造方法都会执行,并且在构造方法前执行。

4.1 示例代码

public class Test3{private String name;// 实例代码块。 无static修饰。{System.out.println("实例代码块执行...");name = "张三";}// 构造器public Test3(){System.out.println("无参构造方法执行...");}// 有参数构造器public Test3(String name){System.out.println("有参构造方法执行...");this.name = name;}public static void main(String[] args) {Test3 t1 = new Test3();Test3 t2 = new Test3("李四");System.out.println(t1.name + t2.name);}
}

输出

实例代码块执行...
无参构造方法执行...
实例代码块执行...
有参构造方法执行...
张三李四

4.2 特点

  • 无static修饰。属于对象,与对象的创建一起执行的。
  • 每次调用构造器初始化对象,实例代码块都要自动触发执行一次。
  • 实例代码块实际上是提取到每一个构造器中去执行的。
  • 实例代码块中的内容在构造方法前执行。

4.3 静态代码块、构造代码块、构造函数执行顺序

父类静态代码块 > 子类静态代码块 > main()方法 > 父类代码块 > 父类构造器 > 子类代码块 > 子类构造器

5 同步代码块

同步代码块指的是被Java中Synchronized关键词修饰的代码块,在Java中,Synchronized关键词不仅仅可以用来修饰代码块,与此同时也可以用来修饰方法,是一种线程同步机制,被Synchronized关键词修饰的代码块会被加上内置锁。

5.1 代码示例

public class Test4 implements Runnable {@Overridepublic void run() {synchronized (CodeBlock.class) {System.out.print("同步代码块...");}}public static void main(String[] args) {CodeBlock a = new CodeBlock();CodeBlock b = new CodeBlock();new Thread(a).start();new Thread(b).start();}
}

java 代码块(局部代码块、实例代码块、静态代码块、同步代码块)相关推荐

  1. [转载] java synchronized静态同步方法与非静态同步方法,同步语句块

    参考链接: Java中的静态方法与实例方法 java synchronized静态同步方法与非静态同步方法,同步语句块 并发编程 线程同步 静态方法锁 非静态方法锁 同步块 进行多线程编程,同步控制是 ...

  2. java synchronized静态同步方法与非静态同步方法,同步语句块

    大纲:java线程知识体系 对代码进行同步控制我们可以选择同步方法,也可以选择同步块,这两种方式各有优缺点.同步块不仅可以更加精确的控制对象锁,还可以控制锁的作用域,何谓锁的作用域?锁的作用域就是从锁 ...

  3. Java多线程同步代码块

    /*多线程的安全问题 1.为什么会出现安全问题? 因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码 后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这 ...

  4. java同步方法同步块_java 同步代码块与同步方法

    同步代码块 synchronized(obj) {//代码块 } obj 为同步监视器,以上代码的含义为:线程开始执行同步代码块(中的代码)之前,必须先获得对同步监视器的锁定. 代码块中的代码是执行代 ...

  5. repo同步代码_工欲善其事,必先利其器:repo 介绍

    介绍 此repo非彼repo.这里的repo,是指谷歌公司的一款小工具,名字就叫repo(我承认,这不是一个好名字,Google里面怎么搜都搜不到它的真身). 解决的问题 有时候,我们需要在一台电脑上 ...

  6. [4G5G专题-36]:物理层-同步信号块SSB与小区主同步PSS、小区辅同步SSS

    目录 第1章 同步信号块SSB概述 1.1 与同步信号块SSB相关的无线时频资源 1.2 同步信号块SSB概述 1.3 同步信号块SSB的来源和背景 1.4 理解本文的的所需要的前序知识 第2章 5G ...

  7. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块的加载顺序

    1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块 在Java中,使用{}括起来的代码称为代码块,代码块可以分为以下四种: (1)普通代码块:就是类中方法的方法体 public vo ...

  8. Java 初始化 代码块_Java中初始化块详解及实例代码

    Java中初始化块详解 在Java中,有两种初始化块:静态初始化块和非静态初始化块. 静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量, ...

  9. 黑马毕向东Java课程笔记(day11):多线程(第一部分)——进程与线程+线程创建+线程安全与同步代码块+同步锁/死锁

    多线程好文:添加链接描述 锁机制:synchronized.Lock.Condition.volatile(原子性可见性)--参考添加链接描述 1.进程与线程概述   首先,对于CPU执行每一个程序, ...

最新文章

  1. 华为手机获取状态栏高度是错误的_华为后置指纹这么多功能,你不会还以为只能解锁和支付吧...
  2. Exchange 日常管理之三设置邮件转发
  3. NET中MSMQ的使用----附例子
  4. FTPClient.listFiles() 放到linux上,返回值为null或数组长度为0
  5. linux命令行安装vnc_centos 6.5 命令行方式可以用vnc连接吗
  6. ERP沙盘模拟实验报告
  7. 合肥工贸高级技工学校计算机系,合肥工贸高级技工学校扎实推进“新技工系统培养”民生工程...
  8. 数学好对学计算机有什么好处,编程对学数学有什么好处
  9. 一些很有意思的文章_拔剑-浆糊的传说_新浪博客
  10. OOP(面向对象)总结(有这一篇足矣)
  11. 单出口双防火墙双核心冗余_王术芳/海关缴款书抵扣和出口退税操作变化要点解析...
  12. 统计字符个数怎么用c语言写,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  13. WingIDE 7.2.0 远程调试
  14. 如果你相中上了一个程序员小伙
  15. ubuntu20.04安装百度网盘
  16. java计算机毕业设计社区养老综合服务平台服务端源码+系统+数据库+lw文档+mybatis+运行部署
  17. 数据库范式1NF 2NF 3NF BCNF通俗讲解
  18. ensp华为路由器静态配置和动态配置
  19. 大学生计算机教程个人总结报告,大学生学习自我总结
  20. php ini_get,ini_get - [ php中文手册 ] - 在线原生手册 - php中文网

热门文章

  1. FileBeat系列:multiline的pattern negate match使用方法
  2. 无线网卡无法启动(代码 10),怎么办?
  3. 欧阳萍听口班(上)——笔记+学习记录
  4. qrcode生成,二维码生成
  5. Python 服务器监控
  6. 木偶然-2014.2.21
  7. PPK 无人机空间定位的秘密武器
  8. iOS 10 消息推送(UserNotifications)秘籍总结
  9. 分享99个ASP.NET源码,总有一款适合您
  10. Qt Android 环境搭建