------- android培训、java培训、期待与您交流! ----------
1,局部代码块
局部代码块(定义在方法里)
作用:控制变量的生命周期;
在程序中,当我们已经使用完 x 后,并且在接下来的代码中,不会再用到x,那么就没必要让x 在内存中占用空间了,这用情况下,可以使用 局部代码块,将x及其所设计到的区域封装为局部代码块,他们在程序执行中顺序不变,只是在执行完成后消失。
public voidmethod(){
{
int x = 4;
System.out.println("x="+x);
}
}
这种写法开发并不常见,但是面试可能会出现,它的作用就是可以限定变量的生命周期.
2,构造代码块:(初始化块)
作用:它可以给所有对象进行初始化
存在于:类中。
定义在类里
{
System.out.println("我是初始化块")
}
括号里的是初始化块,这里面的代码在创建java对象时执行,而且在构造器之前执行!
其实初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了初始化!!
好处是可以提高初始化块的复用,提高整个应用的可维护性。
当类中的构造方法以重载的形式存在时,并且有共同成员变量或共同的方法时,可以通过构造代码块对其进行初始化;这样可以减少代码的重复!
3,静态代码块:
作用:给类进行初始化。
当类中的方法都被静态了化,并且构造方法被private了,这时我们不能,在将这个类实例化,然而又想让类增加一些属性,就可以使用静态代码块
格式:
static{
静态代码块中的执行语句
}
特点:随着类的加载而执行,只执行一次并优先于主函数。 用于给类进行初始化。
Persong p =new Person("XX",XX);
这句话执行了:(对象初始化过程)
<1> 因为new用到了Person.class,所以会先找到Persong.class文件并加载到内存中
<2> 执行该类中的static代码块,如果有的话,给Person.class类进行初始化
<3> p定义函数中,那么在栈内存中开辟一个变量空间p。
<4> 在堆内存中给对象分配空间,并分配内存地址值
<5> 在堆内存中建立对象特有属性,并进行默认初始化
<6> 给对象中的属性进行显示初始化。
<7> 调用构造代码块对对象进行初始化。(执行类中的构造代码块)(6,7是和源码的顺序有关)
<8> 调用对应的构造函数进行对象初始化。对象初始化完毕。
<9> 将内存地址赋给栈内存中的p变量。让p变量指向该对象。
静态代码块和构造代码块的异同:
相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,
不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。
静态代码块只在第一次new执行一次,之后不再执行,而构造代码块在每new一次就执行一次。
非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。