总结
一、静态代码块(最大优先级)
- 静态代码块随着【类】的加载而执行,且只执行一次(至于类什么时候加载,这是一个高深的问题)
- 静态代码块的作用:给【类】,而非对象,进行初始化
- 在Java工程的入口类中,静态代码块优先于 public static void main(String[] args) 函数执行
- 构造代码块是和构造函数同级的用 { } 包起来的一个代码块
- 构造函数每执行一次(即new一个对象),构造代码块就运行一次
- 构造代码块总是优先于构造函数而执行,有多个构造代码块时,相互之间是按代码块的位置顺序先后执行的
- 构造函数是给对象进行针对性的初始化(有参或无参)的,而构造代码块是给所有对象进行通用初始化(无参)的
- 个人觉得不建议使用构造代码块,如果有需要,完全可以用构造函数去实现相应逻辑,这样结构更清晰
- 作用:控制变量的生命周期,基本没啥用
- 在程序中,若当我们已经使用完 x 并且在接下来的代码中不会再用到x,那么就没必要再让 x 在内存中占用空间了,这种情况下,可以将 x 及其所涉及到的区域封装为局部代码块,他们在程序执行中顺序不变,只是在执行完成后消失。
- 注意:在局部代码块中定义的变量在后面不能再使用,但若是在局部代码块前面定义的变量,在局部代码块zhon
测试代码
public class Test { static { System.out.println("Test中的静态代码块");//1 } public static void main(String[] args) { { int x = 5;//此变量仅在局部代码块内部可用 System.out.println("Test中的局部代码块");//2 } System.out.println("**************************"); System.out.println(Person.country);//4。没有创建对象,只会加载Person中的静态代码块 Person.show();//静态代码块仅加载一次 System.out.println("**************************"); new Person().speak();//创建了对象,会先调用构造代码块 System.out.println("**************************"); System.err.println(new Person("我是旺财").name);//每次创建对象都会调用构造代码块 } } //************************************************************************************* class Person { public static String country = "Person的静态成员变量"; public String name; public int age; public void cry() { System.out.println("构造代码块1中调用的方法"); } public void speak() { System.out.println("Person的普通方法"); } public static void show() { System.out.println("这是一个静态方法"); } //构造代码块:给所有对象进行初始化,每产生一个对象就运行一次。这个不是很建议使用,因为可能会忽视它的存在。 { System.out.println("Person的构造代码块1"); cry(); age = 0; } //构造函数:给对象进行针对性的初始化 public Person() { this("我是白乾涛"); } public Person(String name) { this.name = name; } //构造代码块会根据位置按顺序执行 { System.out.println("Person的构造代码块2"); } //静态代码块:随着类的加载而执行,无论放在哪,都优先执行,而且只执行一次。 static { System.out.println("Person的静态代码块");//3 } }
时间: 2024-08-06 20:07:42