几种特殊的java代码块:
1. 静态代码块
2. 构造代码块
3. 局部代码块
静态代码块:
特点:随着类的加载而执行,仅执行一次。
作用:给类进行初始化。
先加载静态变量,再加载静态代码块。
public class Demo {
static int x=9;//静态变量有两次初始化,一次默认初始化,一次显示初始化。
static//静态代码区,在静态变量显示初始化以后执行。
{
System.out.println("类加载就执行的部分!");
System.out.println(x);//这里x输出为9,说明在静态代码区加载之前就已经加载了。
}
static void show()
{
System.out.println("show run");
}
}
public class staticDemo
{
public static void main(String[] args)
{
Demo.show();
}
}
构造代码块:
只要创建对象就会被调用,给所有对象初始化,构造函数只给对应的对象针对性的初始化。
定义构造函数的共性代码可以用构造代码块。
public class Demo {
int x=88;
{//构造代码块
System.out.println("code run"+x);
}
Demo()
{
System.out.println("demo run");
}
Demo(int x)
{
System.out.println("demo run ...");
}
}
public class ConstructorCodeDemo {
public static void main(String[] args)
{
new Demo();
new Demo(8);
}
}
结果:
code run88//成员变量有两次初始化:1.默认初始化,2.显示初始化。这里x输出值88,说明构造代码块在显示初始化之后。
demo run
code run88
demo run ...
静态代码块比构造代码块先执行。
局部代码块:
作用:可以控制局部变量的声明周期。
注意:出了局部代码块就无法继续使用局部代码块中声明的变量。
如果在局部代码块中修改了局部代码块外声明的变量,局部代码块结束后,并不会消除局部代码块对这个变量的修改。
public static void main(String[] args)
{
{//局部代码块。作用:可以控制局部变量的声明周期
int x=999;
System.out.println(x);
}
System.out.println(x);//报错,无法访问x
}