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

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

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

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

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

//声明静态变量i,并有初始化操作,
//编译时,编译器会提供默认的static块来初始化i
public static int i=6;  

//上面一行代码等价于
public static int i; //静态变量的声明,
static{
i = 6; //静态变量的初始化
}

//主函数
public static void main(String args[]) {
System.out.println(i); //输出 6
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

  1. 第三种情况:执行顺序的理解
        static{
           i = 10;   //初始化为10
        }
        public static int i = 11;  //静态变量的声明,
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String args[]) {
        System.<span class="hljs-keyword">out</span>.println(i);  <span class="hljs-comment">//输出 11</span>
    }

//以上代码等价于;
static{
i = 10; // 2.按顺序,先执行该static块,初始化为10
}
public static int i; //1.此时i声明,未初始化
static{
i = 11; // 3.按顺序,再执行该static块,初始化为11
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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

       public static int i = 11;  //静态变量的声明,
       static{
           i = 10;   //初始化为10
        }
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String args[]) {
        System.<span class="hljs-keyword">out</span>.println(i);  <span class="hljs-comment">//输出 10</span>
    }

//以上代码等价于
public static int i; //1.此时i声明,未初始化
static{
i = 11; // 2.按顺序,先执行该static块,初始化为11
}
static{
i = 10; // 3.按顺序,再执行该static块,初始化为10
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

  1. 根据以上分析来理解一下代码;
static{
 i = 18;
}
public static int i = 34;
static{
    i = 40; 
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值