zoukankan      html  css  js  c++  java
  • java中静态代码块详解

    感谢大佬:https://blog.csdn.net/qq_35868412/article/details/89360250

    今天在项目中看到这行代码,静态代码块,很久没用静态代码块了,今天来复习一下,

    依旧按照为什么?是什么?怎么用?的思想,去学习。

    【为什么?】

    先说说代码中为什么要使用这种写法吧,

    还记得静态代码块的特点吗?随着类的加载而执行,而且只执行一次

    对,没错,就是这个,上面的代码就是因为这个特点而这样写的,可以使得静态代码块中的代码只执行一次,不需要每次调用这个变量都给它赋值。

    【是什么?】

       静态代码块:执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。

    静态代码块写法,

    static{

    }

    对应的扩展下非静态代码块

    非静态代码块

    执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。

    写法:

    {

    }

    【怎么用?】

    在类中定义一个静态代码块就行了,然后在里面写对应的代码即可

    【扩展】

    一说到静态代码块,顺便扩展下相应的知识,在面试中可能会被面试官问到,

    静态代码块的执行顺序:静态代码块----->非静态代码块-------->构造函数

    但是面试中,面试官可能会连着其他知识点一起问,比如说继承,这边我就写个小列子,

    父类:

    子类:

    在子类中执行main方法,可以看到控制台打印出来的结果

    如果你想看静态代码块的特征,随着类的加载而执行,而且只执行一次,就在父类中new一个子类就可以看出来了。

    执行父类中的main方法,控制台打印

    然后跟上面的在子类中new一个sons类的结果进行对比,左图是父类执行main方法,右图是子类执行main方法,

    可以看出来,原本在子类中执行main方法,由于子类继承父类,所以父类中的静态代码块优先执行一次,

    但是在左图中,是在父类中执行了main方法,本身父类执行main方法就会执行一次静态代码块,但是在父类中main方法new了一次子类,按继承关系,父类中的静态代码块应该还会执行,但是控制台中却没有打印,这就是因为静态代码块的特征的原因所致,随着类的加载而执行,而且只执行一次

    如果还是不理解,以下代码更为直观

    补充:https://blog.csdn.net/moonspiritacm/article/details/96150049
    静态代码块只能定义在类里面,它独立于任何方法,不能定义在方法里面; 静态代码块内的变量都是局部变量,只在本块内有效;
    静态代码块会在类被加载时自动执行,无论加载者是 JVM 还是其他类; 一个类中允许定义多个静态代码块,执行的顺序根据定义的顺序进行;
    静态代码块只能访问类的静态成员,不允许访问实例成员。

  • 相关阅读:
    316 Remove Duplicate Letters 去除重复字母
    315 Count of Smaller Numbers After Self 计算右侧小于当前元素的个数
    313 Super Ugly Number 超级丑数
    312 Burst Balloons 戳气球
    309 Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期
    Java 类成员的初始化顺序
    JavaScript 全局
    HTML字符实体
    Java中的toString()方法
    JavaScript 弹窗
  • 原文地址:https://www.cnblogs.com/tfxz/p/12621569.html
Copyright © 2011-2022 走看看