java 代码块(局部代码块、实例代码块、静态代码块、同步代码块)
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 代码块(局部代码块、实例代码块、静态代码块、同步代码块)相关推荐
- [转载] java synchronized静态同步方法与非静态同步方法,同步语句块
参考链接: Java中的静态方法与实例方法 java synchronized静态同步方法与非静态同步方法,同步语句块 并发编程 线程同步 静态方法锁 非静态方法锁 同步块 进行多线程编程,同步控制是 ...
- java synchronized静态同步方法与非静态同步方法,同步语句块
大纲:java线程知识体系 对代码进行同步控制我们可以选择同步方法,也可以选择同步块,这两种方式各有优缺点.同步块不仅可以更加精确的控制对象锁,还可以控制锁的作用域,何谓锁的作用域?锁的作用域就是从锁 ...
- Java多线程同步代码块
/*多线程的安全问题 1.为什么会出现安全问题? 因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码 后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这 ...
- java同步方法同步块_java 同步代码块与同步方法
同步代码块 synchronized(obj) {//代码块 } obj 为同步监视器,以上代码的含义为:线程开始执行同步代码块(中的代码)之前,必须先获得对同步监视器的锁定. 代码块中的代码是执行代 ...
- repo同步代码_工欲善其事,必先利其器:repo 介绍
介绍 此repo非彼repo.这里的repo,是指谷歌公司的一款小工具,名字就叫repo(我承认,这不是一个好名字,Google里面怎么搜都搜不到它的真身). 解决的问题 有时候,我们需要在一台电脑上 ...
- [4G5G专题-36]:物理层-同步信号块SSB与小区主同步PSS、小区辅同步SSS
目录 第1章 同步信号块SSB概述 1.1 与同步信号块SSB相关的无线时频资源 1.2 同步信号块SSB概述 1.3 同步信号块SSB的来源和背景 1.4 理解本文的的所需要的前序知识 第2章 5G ...
- java中静态变量,静态代码块,静态方法,实例变量,匿名代码块的加载顺序
1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块 在Java中,使用{}括起来的代码称为代码块,代码块可以分为以下四种: (1)普通代码块:就是类中方法的方法体 public vo ...
- Java 初始化 代码块_Java中初始化块详解及实例代码
Java中初始化块详解 在Java中,有两种初始化块:静态初始化块和非静态初始化块. 静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量, ...
- 黑马毕向东Java课程笔记(day11):多线程(第一部分)——进程与线程+线程创建+线程安全与同步代码块+同步锁/死锁
多线程好文:添加链接描述 锁机制:synchronized.Lock.Condition.volatile(原子性可见性)--参考添加链接描述 1.进程与线程概述 首先,对于CPU执行每一个程序, ...
最新文章
- 华为手机获取状态栏高度是错误的_华为后置指纹这么多功能,你不会还以为只能解锁和支付吧...
- Exchange 日常管理之三设置邮件转发
- NET中MSMQ的使用----附例子
- FTPClient.listFiles() 放到linux上,返回值为null或数组长度为0
- linux命令行安装vnc_centos 6.5 命令行方式可以用vnc连接吗
- ERP沙盘模拟实验报告
- 合肥工贸高级技工学校计算机系,合肥工贸高级技工学校扎实推进“新技工系统培养”民生工程...
- 数学好对学计算机有什么好处,编程对学数学有什么好处
- 一些很有意思的文章_拔剑-浆糊的传说_新浪博客
- OOP(面向对象)总结(有这一篇足矣)
- 单出口双防火墙双核心冗余_王术芳/海关缴款书抵扣和出口退税操作变化要点解析...
- 统计字符个数怎么用c语言写,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
- WingIDE 7.2.0 远程调试
- 如果你相中上了一个程序员小伙
- ubuntu20.04安装百度网盘
- java计算机毕业设计社区养老综合服务平台服务端源码+系统+数据库+lw文档+mybatis+运行部署
- 数据库范式1NF 2NF 3NF BCNF通俗讲解
- ensp华为路由器静态配置和动态配置
- 大学生计算机教程个人总结报告,大学生学习自我总结
- php ini_get,ini_get - [ php中文手册 ] - 在线原生手册 - php中文网