点击上方蓝字关注我们
大家好,我是雄雄,今天给大家分享的是: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方法时,先执行的静态代码块):
3. 同步代码块
即使用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(); //窗口1 Thread t1 = new Thread(task); //窗口2 Thread t2 = new Thread(task); //窗口3 Thread 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中的四种代码块,至于说用哪种得看你需求了,“因材施教”即可。