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

简介: java中你知道的这四种代码块吗?

点击上方蓝字关注我们


大家好,我是雄雄,今天给大家分享的是: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中的四种代码块,至于说用哪种得看你需求了,“因材施教”即可。


相关文章
|
1月前
|
Arthas Java 中间件
如何优雅的在java中统计代码块耗时
如何优雅的在java中统计代码块耗时
54 1
|
1天前
|
Java
Java中代码块区别及代码示例
Java中代码块区别及代码示例
|
4天前
|
Java C++
Java 基础内容(代码块)
Java 基础内容(代码块)
|
4天前
|
Java 编译器
Java中4种代码块:普通代码块,静态代码块,同步代码块,构造代码块
Java中4种代码块:普通代码块,静态代码块,同步代码块,构造代码块
|
4天前
|
Java
java代码块和具体的代码应用
java代码块和具体的代码应用
|
1月前
|
Java
【JAVA学习之路 | 基础篇】类的成员--代码块
【JAVA学习之路 | 基础篇】类的成员--代码块
|
16天前
|
Java
Java基础8-一文读懂Java 代码块和执行顺序(二)
Java基础8-一文读懂Java 代码块和执行顺序(二)
15 0
|
16天前
|
Java
Java基础8-一文读懂Java 代码块和执行顺序(一)
Java基础8-一文读懂Java 代码块和执行顺序(一)
14 0
|
30天前
|
Java 数据库连接
Java中的静态代码块深入解析
Java中的静态代码块深入解析
30 0
|
30天前
|
存储 Java 编译器
【Java探索之旅】静态关键字static与代码块的奥秘
【Java探索之旅】静态关键字static与代码块的奥秘
20 0