标签:
总结
一、静态代码块(最大优先级)
- 静态代码块随着【类】的加载而执行,且只执行一次(至于类什么时候加载,这是一个高深的问题)
- 静态代码块的作用:给【类】,而非对象,进行初始化
- 在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}}
标签:
原文地址:http://www.cnblogs.com/baiqiantao/p/5449943.html