zoukankan      html  css  js  c++  java
  • Java static块

    首先,我们看一个实际例子:

    class Test{
        
        public static int X=100;
        public final static int Y=200;
        
        public Test(){
            System.out.println("Test构造函数执行");
        }
        
        static{
            System.out.println("static语句块执行");
        }
        
        public static void display(){
            System.out.println("静态方法被执行");
        }
        
        public void display_1(){
            System.out.println("实例方法被执行");
        }
    }
    
    public class StaticBlockTest {
        public static void main(String args[]) {
            Test t = new Test();
    new Test(); } }

      程序的输出为:

    static语句块执行
    Test构造函数执行
    Test构造函数执行

      实际上,static块的执行发生在“初始化”的阶段。初始化阶段,jvm主要完成对静态变量的初始化静态块执行等工作不初始化则不会执行static块。

      需要注意的一点是:非static变量不可以置于static块中。

    一、静态变量的初始化

    public class Test {
        static {
            _i = 20;
        }
        public static int _i = 10;
        
        public static void main(String[] args) {
            System.out.println(_i);
        }
    }

      代码输出:10

    public class Test {
        
        public static int _i = 10;
        static {
            _i = 20;
        }
        public static void main(String[] args) {
            System.out.println(_i);
        }
    }

      代码输出:20

      结论:我们要注意到这两个输出不同的区别仅在于static变量与static块的位置不一样。也就是说对于静态变量,它的初始化按照顺序初始化。

    问题2:JDK如何处理static块

      类定义中可以存在多个static块吗?回答是可以。如:

    public class Test {
        public static int _i;
        static {
            _i = 10;
        }
       
        static {
            _i = 20;
        }
        
        public static void main(String[] args) {
            System.out.println(_i);
        }
    }

      输出结果:20

      输出符合问题一得出的结论。

      结论:不仅类定义中可以有多个static块,而且在编译时编译器会将多个static块按照代码的前后位置重新组合成一个static块。

  • 相关阅读:
    SQL SERVER 实现多个数据库之间表的联系,利用临时表枚举表中行数据
    [CCF CSP]201909-2 小明种苹果(续)
    Anaconda 安装 Python 库(MySQLdb)
    [CCF CSP]201903-4 消息传递接口
    [CCF CSP]201609-4 交通规划
    2019年12月CSP考试第三题化学方程式解法
    Leetcode.94.二叉树的中序遍历
    GENIA命名实体数据集解析代码
    git添加新用户
    C#语言 十大经典排序算法动画与解析!(动态演示+代码)(java改写成C# )
  • 原文地址:https://www.cnblogs.com/wiessharling/p/3626787.html
Copyright © 2011-2022 走看看