代码块,静态变量,静态代码块,运算符优先级
1)普通代码块:写在方法或者语句中的代码块
2)构造块:直接写在类中的代码块
1 class Demo{ 2 { 3 System.out.println("1,构造块"); 4 } 5 public Demo(){ 6 System.out.println("2,,构造方法"); 7 } 8 } 9 public class CodeDemo02 { 10 11 public static void main(String[] args) { 12 new Demo(); 13 new Demo(); 14 new Demo(); 15 } 16 17 }
输出结果为:
1,构造块
2,,构造方法
1,构造块
2,,构造方法
1,构造块
2,,构造方法
分析:构造块优于构造方法执行,而且每次实例化对象都会执行构造块中的代码,即会执行多次。
3)静态代码块
1 class Demo{ 2 { 3 System.out.println("1,构造块"); 4 } 5 static{ 6 System.out.println("0,,静态代码块"); 7 } 8 public Demo(){ 9 System.out.println("2,,构造方法"); 10 } 11 } 12 13 public class CodeDemo03 { 14 static{ 15 System.out.println("在主方法所在类中定义的代码块"); 16 } 17 public static void main(String[] args) { 18 new Demo(); 19 new Demo(); 20 new Demo(); 21 } 22 }
输出结果为:
在主方法所在类中定义的代码块
0,,静态代码块
1,构造块
2,,构造方法
1,构造块
2,,构造方法
1,构造块
2,,构造方法
分析:静态代码块优于主方法执行,而在类中定义的静态代码块会优于构造方法执行,而且不管有多少个对象产生,静态代码块只执行一次。
4)
1 public class Test { 2 static { 3 int x = 5; //x是局部变量,不影响后边的值。 4 System.out.println(x); 5 } 6 static int x,y; //x和y是全局变量,初始化后x=0,y=0。 7 public static void main(String[] args) { 8 x--; 9 myMethod(); 10 System.out.println(x + y++ +x); 11 } 12 public static void myMethod(){ 13 y = x++ + ++x; 14 //计算顺序:y = x+(++x);x+1 15 } 16 17 }
输出结果为:
5
2