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块。

  • 相关阅读:
    面向对象-01
    网络编程-02-客户端搭建
    网络编程-01-服务端搭建
    日志-02
    日志-01
    md5加密
    shell 第五天
    shell第四天
    shell第三天
    shell
  • 原文地址:https://www.cnblogs.com/wiessharling/p/3626787.html
Copyright © 2011-2022 走看看