大家好,我是雄雄,今天给大家分享的是:java中构造代码块的用法。

什么叫代码块?代码块将多行代码封装到一个{}中,形成一个独立的代码区,这就够成了代码块,一般常见的代码块是这样的:

Java中,代码块根据其执行的时机与声明的不同可以分为以下四类:

  •  普通代码块
  •  静态代码块
  •  同步代码块
  •  构造代码块

接下来我们依次介绍一下这4中代码快。

1.普通代码块:
即在方法名后面用{}圈起来的代码块,那么在什么时候执行呢?当你调用该方法名时开始执行,调用依次执行一次,调用两次执行两次,代码如下:

public void info(){System.out.println("欢迎关注公众号【雄雄的小课堂】,嘿嘿!");}public static void main(String[] args) {info();}

运行结果:

2.静态代码块:
即在类中使用static修饰,后面{}中的那段代码块。那么在什么时候执行呢?在该类加载时就执行,并且只执行一次,一般用于加载驱动。代码如下:

public void info(){System.out.println("欢迎关注公众号【雄雄的小课堂】,嘿嘿!");}static{System.out.println("执行静态代码块");}public static void main(String[] args) {info();}

运行结果如下(在执行info方法时,先执行的静态代码块):

  1. 同步代码块,:
    即使用synchronized关键字修饰,并使用“{}”括起来的代码片段,它表示同一时间只能有一个线程进入到该方法中,是一种多线程保护机制。接下来我们举个例子来看看:

这个例子有点麻烦,我们假设有这样的需求:在趵突泉景区门票售票处有三个售票窗口,分别为1号窗口、2号窗口和3号窗口。当天票的数量是有限的,100张。

现在开始来卖票,3个窗口同时来卖,还需要保证卖的票不能重复(根据实际情况,一张票只能卖一次),我们不用同步代码块,来模拟一下该业务。

售票类:

/***
*
* 项目名称:BianChengXiGuan
* 类名称:Ticket
* 类描述:售票类
* 创建人:Mu Xiongxiong
* 创建时间:2020-8-16 下午2:56:08
* 修改人:Mu Xiongxiong
* 修改时间:2020-8-16 下午2:56:08
* 修改备注:
* 个人博客:https://blog.csdn.net/qq_34137397
* 微信公众号:雄雄的小课堂
* @version
**/
public class Ticket implements Runnable {private int tickets = 100;//运行public void run() {while (true) {if (tickets <= 0) {System.out.println("不好意思,票卖完了");break;} else {System.out.println(Thread.currentThread() + "恭喜你买到票,票号"+ tickets);tickets--;}}}}

开始卖票:

public static void main(String[] args) {Ticket task = new Ticket();//窗口1Thread t1 = new Thread(task);//窗口2Thread t2 = new Thread(task);//窗口3Thread t3 = new Thread(task);//启动三个窗口开始售卖t1.start();t2.start();t3.start();}

接下来看看运行结果:

可以看到,编号为100的门票卖了3次!如何避免此类情况出现呢,就需要用到同步代码块,改正后的代码:

public void run() {synchronized (this) {while (true) {if (tickets <= 0) {System.out.println("不好意思,票卖完了");break;} else {System.out.println(Thread.currentThread() + "恭喜你买到票,票号"+ tickets);tickets--;}}}}

运行结果如下:

这样就没有问题了。

4.构造代码块:
即在类中声明的时候没有修饰词,直接使用{}括起来的代码就是构造代码块。执行时机为:当执行每个(不管是有参还是无参)构造函数之前执行,代码如下:

public class TestMain {//构造代码块{System.out.println("执行构造代码块");}public TestMain(){System.out.println("执行无参构造方法");}public TestMain(int a){System.out.println("执行有参构造方法");}public static void main(String[] args) {TestMain test1 = new TestMain();TestMain test = new TestMain(3);System.out.println("执行完毕!!");}
}

运行结果为:

你看是不是这样的。

以上的就是java中的四种代码块,至于说用哪种得看你需求了,“因材施教”即可。

欢迎关注公众号雄雄的小课堂

java中你知道这四种代码块吗?相关推荐

  1. java中你知道的这四种代码块吗?

    点击上方蓝字关注我们 大家好,我是雄雄,今天给大家分享的是:java中的四种代码块 什么叫代码块? 代码块就是将多行代码封装到一个"{}"中,形成一个独立的代码区,这就构成了代码块 ...

  2. java中的四种代码块

    原文链接: java中的四种代码块_Munt的博客-CSDN博客_java中代码块 在java中用{}括起来的称为代码块,代码块可分为以下四种: 一.简介 1.普通代码块: 类中方法的方法体 2.构造 ...

  3. java 代码块_详解java中的四种代码块

    在java中用{}括起来的称为代码块,代码块可分为以下四种: 一.简介 1.普通代码块: 类中方法的方法体 2.构造代码块: 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行. ...

  4. java中遍历HashMap的四种方法及效率比较

    1. 推荐方法: 使用entrySet 遍历Map 类集合KV,而不是keySet 方式进行遍历. 代码示例如下: // 循环第二种HashMap<Integer, String> map ...

  5. JAVA中集合输出的四种方式

    在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello {public stati ...

  6. java中Map遍历的四种方式

    java中Map遍历的四种方式 在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方 ...

  7. java中创建数组的四种方法

    详细方法见如下四部分代码块 方法一: 详情见注释 //创建数组的第一种方法int[] arr=new int[6]; //通过创建对象的方法来声明一个数组对象int intValue=arr[5]; ...

  8. java 中的静态(static)代码块

    类字面常量 final 静态域不会触发类的初始化操作 非 final static 静态域(以及构造器其实是一种隐式的静态方法) Class.forName():会自动的初始化: 使用 .class来 ...

  9. Java基础篇:四种代码块详解

    所谓代码块,就是用大括号{}将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法.一般来说,代码块是不能单独运行的,它必须有运行主体.在Java中代码块主要分为四种:普通代码块.静态代码块. ...

最新文章

  1. IIS APPPOOL\DefaultAppPool 登录失败的解决方法
  2. RabbitMQ 高可用之如何确保消息成功消费
  3. Java 获取键盘输入
  4. boost::with_lock_guard相关的测试程序
  5. [数分提高]2014-2015-2第8教学周第1次课 (2015-04-21)
  6. 深入学习Redis(4):哨兵
  7. BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
  8. nginx-正则表达式-重定向
  9. 广告学计算机平面设计(1)形考5,中等职业学校计算机平面设计专业教学标准 (1)...
  10. 刚装的系统没有sql server(mssqlserver)_数据库与SQL学习
  11. Python 之 模块和包
  12. rabbitmq 笔记
  13. fluent python_流畅的Python-Fluent Python简要书评
  14. 音频总线之I2S总线介绍及相关协议
  15. Excel常用函数命令
  16. st计算机编程语言,ST语法编程基础-ST语言简介
  17. mac 无法对计算机进行更改,解析深度技术win10 MAC不能修改的原因和解决成功的技巧...
  18. Java实现:冒泡排序
  19. 修改jupyter notebook的默认工作路径
  20. psd 解析 java_PSD解析工具实现(一)

热门文章

  1. Too Many Segments (hard version) CodeForces - 1249D2(贪心+容器vector+set)
  2. 数据结构---二叉线索树
  3. CF1365G Secure Password(构造,交互,二进制分组)
  4. Codeforces Round #736 (Div. 1Div2)
  5. cf 1511 D. Min Cost String
  6. 牛客题霸 [最大数] C++题解/答案
  7. 2021牛客NOIP提高组OI赛前模拟赛第一场T2——牛牛和数组操作(区间dp)
  8. 不止代码:循环比赛(分治)
  9. CF573E-Bear and Bowling【dp,平衡树】
  10. P3808,P3796-[模板]AC自动机(简单版/加强版)