• 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方法时,先执行的静态代码块):

    在这里插入图片描述

    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();
        //窗口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中的四种代码块,至于说用哪种得看你需求了,“因材施教”即可。

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

  • 相关阅读:
    三调数据库标注插件
    ionic ios 打包发布流程
    ionic ios 打包 真机测试常见问题
    使用Jquery Viewer 展示图片信息
    微信支付退款证书服务器配置
    帝国CMS站点迁移
    solr 服务器搭建(Linux版)
    ionic ios 打包
    Solr 同义词搜索
    ionic 环境搭建
  • 原文地址:https://www.cnblogs.com/a1111/p/14877427.html
Copyright © 2020-2023  润新知