举例说明java中静态代码块、非静态代码块、构造函数的执行顺序
2013-04-12 17:01
411 查看
例子如下:
public class TestCodeSeg {
static {
System.out.println("1");
}
{
System.out.println("2");
}
public TestCodeSeg() {
System.err.println("3");
}
public static void main(String[] args) {
new TestCodeSeg();
}
}
运行结果如下:
run:
1
3
2
成功生成(总时间:0 秒)
run:
1
2
3
成功生成(总时间:0 秒)
run:
3
1
2
成功生成(总时间:0 秒)
三种不同的运行结果说明它们的执行顺序是:
到目前为止能确定的一句话就是静态代码块比非静态代码块先执行。而构造函数的执行顺序不能确定,有可能在非静态代码块之后,有可能在它之前,也有可能在静态代码块之前执行。
再举例说明,如下所示:
public class Father {
//父类静态代码块
static {
System.out.println("父类---静态代码块");
}
//父类非静态代码块
{
System.out.println("父类===非静态代码块");
}
//父类构造函数
public Father() {
System.out.println("父类~~~构造函数");
}
//父类的main方法
/*public static void main(String args[]){
Father f=new Son();
}*/
}
class Son extends Father {
//static Son s=new Son();
//子类静态代码块
static {
System.out.println("子类---静态代码块");
}
//子类非静态代码块
{
System.out.println("子类===非静态代码块");
}
//子类构造函数
public Son(){
System.out.println("子类~~~构造函数");
}
//子类的main方法。
public static void main(String args[]){
Father f=new Son();
}
}
运行结果如下:
run:
父类---静态代码块
子类---静态代码块
父类===非静态代码块
父类~~~构造函数
子类===非静态代码块
子类~~~构造函数
成功生成(总时间:0 秒)
根据运行结果可知:
父类和子类的静态代码块先执行,其次是执行父类的非静态代码块和构造函数,最后执行的是子类的非静态代码块和构造函数。
public class TestCodeSeg {
static {
System.out.println("1");
}
{
System.out.println("2");
}
public TestCodeSeg() {
System.err.println("3");
}
public static void main(String[] args) {
new TestCodeSeg();
}
}
运行结果如下:
run:
1
3
2
成功生成(总时间:0 秒)
run:
1
2
3
成功生成(总时间:0 秒)
run:
3
1
2
成功生成(总时间:0 秒)
三种不同的运行结果说明它们的执行顺序是:
到目前为止能确定的一句话就是静态代码块比非静态代码块先执行。而构造函数的执行顺序不能确定,有可能在非静态代码块之后,有可能在它之前,也有可能在静态代码块之前执行。
再举例说明,如下所示:
public class Father {
//父类静态代码块
static {
System.out.println("父类---静态代码块");
}
//父类非静态代码块
{
System.out.println("父类===非静态代码块");
}
//父类构造函数
public Father() {
System.out.println("父类~~~构造函数");
}
//父类的main方法
/*public static void main(String args[]){
Father f=new Son();
}*/
}
class Son extends Father {
//static Son s=new Son();
//子类静态代码块
static {
System.out.println("子类---静态代码块");
}
//子类非静态代码块
{
System.out.println("子类===非静态代码块");
}
//子类构造函数
public Son(){
System.out.println("子类~~~构造函数");
}
//子类的main方法。
public static void main(String args[]){
Father f=new Son();
}
}
运行结果如下:
run:
父类---静态代码块
子类---静态代码块
父类===非静态代码块
父类~~~构造函数
子类===非静态代码块
子类~~~构造函数
成功生成(总时间:0 秒)
根据运行结果可知:
父类和子类的静态代码块先执行,其次是执行父类的非静态代码块和构造函数,最后执行的是子类的非静态代码块和构造函数。
相关文章推荐
- JAVA继承关系中静态代码块、非静态代码块,构造函数的执行顺序
- Java初始化顺序总结及其程序执行过程图- 静态变量、静态代码块、成员变量、构造函数
- JAVA父子类的构造函数、静态代码块等执行顺序
- java继承中父类和子类静态、非静态代码块,构造函数,静态方法的执行顺序
- java中代码执行顺序(静态代码块、构造函数)
- JAVA之父子类的构造函数、静态代码块等执行顺序
- JAVA之父子类的构造函数、静态代码块等执行顺序
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
- Java中构造函数、构造代码块、静态代码块等的执行顺序问题
- 黑马程序员——java中静态代码块、构造代码块、构造函数的执行顺序以及作用
- 又一波 有关 java 静态代码块 代码块 构造函数执行顺序问题
- java 静态属性 静态代码块 静态方法声明 构造块 构造函数 动态属性 执行顺序
- 举例说明构造代码块、静态、非静态代码块的执行顺序
- java关于代码块 , 动态代码块 , 静态代码块 , 静态方法 , 构造函数的执行顺序
- Java 静态代码块、代码块、构造函数、静态Field声明执行顺序
- 关于Java中静态代码块以及构造函数的执行先后顺序
- 【java】静态代码块,非静态代码块,构造函数 的执行顺序问题
- 举例说明Java中代码块的执行顺序(非静态代码块)
- [Java]Java静态代码块、静态函数、动态代码块、构造函数等的执行顺序
- JAVA静态代码块、非静态代码块、构造函数的执行顺序