class 类体中内容{
// 静态代码块 类加载的时候执行,并且只执行一次,执行时机先于主方法
// 实例代码块 在构造方法执行之前执行,构造方法执行一次,实例代码块就执行一次
// 静态变量 在类加载时初始化 存在于方法区内存 使用"类名."来访问
// 实例变量 在创建java对象(构造方法执行时)时初始化 存在于堆内存java对象内部 使用"引用."来访问
// 静态方法 使用"类名."来调用
// 实例方法 使用"引用."来调用
// 主方法(入口)
// 构造方法 用来创建java对象 使用关键字"new"来调用
/**
* 各种方法和代码块在类加载的时候都存放在方法区内存中,在执行的时候在栈中为其分配内存(压栈),执行结束后弹栈
* 静态代码块的执行与静态变量的初始化没有先后顺序 它们按照自上而下的顺序执行
*/
/*
执行顺序分析
1、首先是静态代码块,它优先于主方法先执行,并且只执行一次,又因为静态代码块有两个,按照由上到下的顺序(1 8)
2、然后是主方法执行,在主方法里,代码也是按照由上到下的顺序执行,所以输出(2 )
3、这时开始执行无参构造方法,而实例代码块的执行先于构造方法,所以输出(7 5 3 )
4、到此开始执行有参构造,实例代码块的特点是每次构造方法执行,他都先执行一次,所以输出(7 6 4 )
为此最后的输出结果是:1 8 2 7 5 3 7 6 4
*/
//属性
int i;
//静态代码块
static {
System.out.print("1 ");
}
//主方法
public static void main(String[] args) {
System.out.print("2 ");
new 类体中内容();
System.out.print("3 ");
new 类体中内容(111);
System.out.print("4 ");
}
//无参构造方法
public 类体中内容() {
System.out.print("5 ");
}
//有参构造方法
public 类体中内容(int i) {
this.i = i;
System.out.print("6 ");
}
//实例代码块
{
System.out.print("7 ");
}
//静态代码块
static {
System.out.print("8 ");
}
}