java中的代码块一共分为以下几种:普通代码块、构造代码块、静态代码块
一、普通代码块
首先从位置上来说,普通代码块是放在方法中的,普通代码块的执行也是按照代码书写顺序进行执行的,使用代码块可以解决当前方法中变量名重复的问题,
当你想要在一个方法中多次使用同一个变量名,并且互不影响,这时就可以将该变量放入普通代码块中。
public static void main(String[] args){ System.out.println("主方法输出"); { System.out.println("普通代码块输出"); } }
输出结果如下:
二、构造代码块
首先从位置上来说,构造代码块是放在类中的,构造代码块是先于构造方法(无论是有参还是无参)执行的,每次创建对象时,构造代码块就会执行一次。
public CodeBlockDemo(){ System.out.println("构造方法输出"); } //构造代码块 { System.out.println("构造代码块输出..."); } public static void main(String[] args){ //创建对象1 CodeBlockDemo codeBlockDemo1 = new CodeBlockDemo(); //创建对象2 CodeBlockDemo codeBlockDemo2 = new CodeBlockDemo(); System.out.println("主方法输出"); { System.out.println("普通代码块输出"); } System.out.println("==================="); }
输出结果如下:
根据结果我们可以看出,每次在创建对象时,构造代码块都会执行一次,并且比构造方法优先执行。
经反编译工具后如下:
通过这里我们可以看出,构造代码块中的内容全部都放在构造方法中了,所以会每次创建对象时,都会执行构造代码块,然后再执行构造方法中的内容。
三、静态代码块
从位置上来说,静态代码块与构造代码块放的位置一样,都是放在类中,但是静态代码块是使用static关键字修饰的代码块。静态代码块是在类加载的时候执行,
并且只会只能执行一次,跟创建不创建对象无关。
public CodeBlockDemo(){ System.out.println("构造方法输出"); } //静态代码块 static { System.out.println("静态代码块输出..."); } public static void main(String[] args){ System.out.println("主方法输出"); System.out.println("==================="); }
输出结果如下:
四、下面我们来总结一下普通代码块、构造代码块以及静态代码块的执行顺序
public CodeBlockDemo(){ System.out.println("构造方法输出"); } //构造代码块 { System.out.println("构造代码块输出..."); } //静态代码块 static { System.out.println("静态代码块输出..."); } public static void main(String[] args){ //创建对象1 CodeBlockDemo codeBlockDemo1 = new CodeBlockDemo(); //创建对象2 CodeBlockDemo codeBlockDemo2 = new CodeBlockDemo(); System.out.println("主方法输出"); { System.out.println("普通代码块输出"); } System.out.println("==================="); }
输出结果如下:
从以上输出结果中我们可以得到以下结论:静态代码块是再类加载的时候执行,执行优先级最高,构造代码块是在创建对象时执行,
并且每次创建对象的时候都会执行,优于构造方法执行,普通代码块放在方法中,按照书写顺序执行。
所以运行优先级从高到低为:静态代码块 > 构造代码块 > 构造方法 > 普通代码块