static 用法

jvm的加载顺序:
父类static块,子类static块,父类构造函数,子类构造函数

 1. public class MyObject { 
  2.     
  3.    public void getX(){ 
  4.        System.out.print("x =" + x); 
  5.    } 
  6.         
  7.    static { 
  8.        System.out.println(x); 
  9.    } 
  10.     
  11.    static int x = 10; 
  12.     
  13.    public static void main(String [] args){ 
  14.        MyObject myObject = new MyObject(); 
  15.        myObject.getX(); 
  16.    } 
  17.     
  18. } 

public class MyObject {

public void getX(){
System.out.print("x =" + x);
}

static {
System.out.println(x);
}

static int x = 10;

public static void main(String [] args){
MyObject myObject = new MyObject();
myObject.getX();
}

}


如果是初始化为0.
那么为何此时编译不过。
出错位置:System.out.println(x);

这个在JLS(第3版)里面有说到

12章里面谈到,大意是
静态字段是在加载类时初始化为默认值,不需要调用代码
而显式初始化是作为初始化类的一部分执行的,并且必须按顺序调用静态初始化语句,并且"不能引用其声明出现在使用之后的类中声明的变量"(原话),也就是说,你只要不把它取出来就可以

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值