直接亮我们的代码:
package Demo;
public class Demo {
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
}
}
class Test {
static int x = 10;
int y = 6;
static {
x = x + 5;
}
{
y = y + 10;
}
static {
x = x + 5;
}
public Test() {// 构造方法
x = x + 5;
{
System.out.println(x * y);
}
}
}
首先我们来看在main()方法中实例化对象t1的的过程:
首先应当执行静态模块:即执行两次x=x+5;这个时候x=20了,然后执行普通模块:y=y+10;这个时候y=16;
然后进入构造器:x=x+5;并且打印x*y;x在构造器中的结果是25了,故25*16=400;
然后我们看看实例化对象t2的过程:
由于静态模块只执行一次,所以,x=25的值可以确定了,然后我们看看y值变化。y的值上次已经算出来了是16,所以这次应当也是16!所以我们只需要计算构造器里面的公式了,也就是(25+5)*16 = 480,打印结果是这样的。