package DaiMaKuai.bag; /* 代码块:在java中,使用{}括起来的代码被称为代码块 根据其位置和生命的不同,可以分为 局部代码块:局部位置(在方法内出现),用与限定变量的生命周期。 构造代码块:在类中的成员位置(也就是类中方法外出现),用{}括起来的代码。每次调用构造方法执行前,都会先执行构造代码块。 作用:可以把多个构造方法中的共同代码放到一起,对对象进行初始化。 静态代码块:在类中的成员位置(也就是类中方法外出现),用{}括起来的代码。只不过它用static修饰。 作用:一般是对类进行初始化 面试题 静态代码块,构造代码块,构造方法执行顺序? 先执行静态代码块,构造代码块,构造方法 静态代码块只执行一次 构造代码块,在每次调用构造方法之前都执行 */ public class DaiMaKuai { //静态代码块 static { int a = 1000; System.out.println(a); } {//构造代码块 int x = 100; System.out.println(x); } public DaiMaKuai(){//构造方法 System.out.println("code"); } public DaiMaKuai(int a){//构造方法 System.out.println("code"); } {//构造代码块 int y = 200; System.out.println(y); } //静态代码块 static { int a = 2000; System.out.println(a); } public static void main(String[] args){ //局部代码块从上往下依次执行 { int x = 10; System.out.println(x); } //找不到符号 //System.out.println(x); new DaiMaKuai(); }
}
上下是分开的
-----------------------------------------------------------------------
package DaiMaKuai.bag; public class DaiMaKuai1 { static { System.out.println("静态代码块"); } { System.out.println("构造代码块"); } public DaiMaKuai1(){ System.out.println("构造方法"); } } class DaiMaKuai2{ static { System.out.println("放下屠刀,立地成魔"); } public static void main(String[] args){ DaiMaKuai1 daiMaKuai1 = new DaiMaKuai1(); DaiMaKuai1 daiMaKuai2 = new DaiMaKuai1(); System.out.println("main方法"); } }
在这里上面DaiMaKuai1中我测试的时候确实是按照先走静态代码块,然后在构造方法启动之前,先执行构造代码块,不过测试中首先调用的是DaiMaKuai2,因为是主入口所在的类,所以会先调用DaiMaKuai2中的静态代码块,然后执行main方法中的语句我把创建对象放在了前面所以它首先执行的是DaiMaKuai1中的静态代码块,构造代码块,构造函数,然后最后执行的打印语句,在入口main中还是顺序结构走,但是只要有静态则优先静态其次是构造最后是局部。