标题:Java测试构造器,代码块,变量的初始化先后顺序包括静态的
一、 构造器,代码块,变量的初始化先后顺序
- 1.先为所有变量,创建空间,赋默认值【0,null等等默认值】
- 2.按顺序初始化【变量、代码块的顺序初始化,谁在前面,谁先初始化】
- 3.按构造器初始化
eg:
- a=0,b=0;
- b=5->6 【因为代码块在int b的前面,所以先执行代码块,在执行b=6】
- b=8【执行构造器中的初始化】
注意:
- 此处的代码块中
System.out.println(b);
会编译出错,是因为b在int b=6
的前面,故先执行b的初始化【b=5】所以在此之前不能输出未初始化的b。 - 后面一处的
System.out.println(b);
是因为避免b未初始化而使用,故也编译失败
{
//System.out.println(b);
b=5;//在定义之前不能使用,但可以赋值
//System.out.println(b);
}
完整代码如下:
/**
* 测试构造器,代码块,变量的初始化先后顺序
*1. 先为所有变量,创建空间,赋默认值【0,null】
* 2.按顺序初始化【变量、代码块的顺序初始化】
* 3.按构造器初始化
* @author dell
*
*/
public class InitTest02 {
public InitTest02() {
System.out.println(b);
b=8;//
}
private int a;
{
//System.out.println(b);
b=5;//在定义之前不能使用,但可以赋值
//System.out.println(b);
}
private int b=6;
public static void main(String[] args) {
InitTest02 init = new InitTest02();
System.out.println("main:"+init.b);
}
}
二、构造器,代码块,变量的初始化先后顺序 静态的【原理类似】
- a=0,b=0
- b=5
- b=8
/**
* 先为所有类变量创建空间,赋初值【0,null】
* 执行初始化【自己设置的初始化,】
* @author dell
*
*/
public class InitTest03 {
static int a;
static {
// System.out.println(b);
b=5;
}
static int b=8;
public static void main(String[] args) {
System.out.println("理论为5:"+InitTest03.b);//理论为5:8
}
}