static关键字修饰变量的加载和初始化过程(Java)

来源:互联网 发布:sql联合主键查询 编辑:程序博客网 时间:2024/05/29 12:37

static关键字修饰变量的加载和初始化过程(Java)

一、static修饰变量
1. 第一种情况

public static int i;  //声明静态变量ipublic static void main(String args[]) {    System.out.println(i);  //输出 0}

说明:声明了一个静态变量,但没有初始化操作;所以编译器不会提供默认的static来初始化静态变量 i;即在main函数没调用之前 i 没有初始化,当main函数加载到内存栈中后, 静态变量 i 同时被加载到堆中,在堆中 i 被默认初始化为 0 ;
注:整型初始化为 0 ,应用类型初始化为 null
2. 第二种情况

//声明静态变量i,并有初始化操作,//编译时,编译器会提供默认的static块来初始化ipublic static int i=6;  //上面一行代码等价于public static int i;  //静态变量的声明,   static{        i = 6;       //静态变量的初始化    }//主函数public static void main(String args[]) {    System.out.println(i);  //输出 6}
  1. 第三种情况:执行顺序的理解
        static{           i = 10;   //初始化为10        }        public static int i = 11;  //静态变量的声明,        public static void main(String args[]) {            System.out.println(i);  //输出 11        }//以上代码等价于;static{     i = 10;   // 2.按顺序,先执行该static块,初始化为10     }public static int i;  //1.此时i声明,未初始化static{    i = 11;   //  3.按顺序,再执行该static块,初始化为11    }

结果:最终输出为11;静态变量 i 的值改变了两次。
4. 第四种情况 :和第三种进行比较理解

       public static int i = 11;  //静态变量的声明,       static{           i = 10;   //初始化为10        }        public static void main(String args[]) {            System.out.println(i);  //输出 10        }//以上代码等价于public static int i;  //1.此时i声明,未初始化static{     i = 11;   // 2.按顺序,先执行该static块,初始化为11     }static{    i = 10;   //  3.按顺序,再执行该static块,初始化为10    }
  1. 根据以上分析来理解一下代码;
static{ i = 18;}public static int i = 34;static{    i = 40; }

说明: 静态变量 i的初始化过程: 18 –> 34 –> 40。所以最后的输出结果是40。

原创粉丝点击