public class Test1 {
static int x=10; static { x+=5;} public static void main(String[] args) { System.out.println("x=" + x); } static { x/=3;}}
谁能帮我解释下????
static int x=10; static { x+=5;} public static void main(String[] args) { System.out.println("x=" + x); } static { x/=3;}}
谁能帮我解释下????
所以 x = (10+5)/3 = 5
static { x+=5;},static { x/=3;}最后在执行main方法的时候由于x是static的所以这个时候x等于5你也可以理解为当Test1存在就执行了
x=10
x+=5
x/=3
类中成员的加载顺序:
1.先静态部分,后非静态部分。
2.对于静态部分,先属性后方法。
3.对于非静态部分,main方法在最后执行。
其实,像一般的定义
static int a = 10; //为什么在加载的时候变成10,这样的代码其实相当于
static int a; //定义
static {a=10;} //赋值
所以,很显然,你的类被加载的时候,static{}代码块被执行,然后因为是application程序,会进入程序入口的main方法,剩下的就不用解释了
和static{}对应的是{},即前面不加static,这样的{}的代码块就实例初始化块,会在对象初始化的时候被调用,先于构造函数,比如
class A {
static {System.out.println("类加载时执行");}
{System.out.println("对象创建时,构造函数执行前被执行");}
public A() {
System.out.println("构造函数,对象创建的时候执行");
}
public static void main(String[] args) {
System.out.println("程序入口,程序启动时执行");
A a = new A(); //创建对象,可以看看执行顺序
}
}
所以 x = (10+5)/3 = 5。正解不解释。