Java初始化顺序,静态变量,static块,实例变量,构造器的初始化顺序
2012-07-25 11:21
447 查看
2.继承情况下Java初始化顺序
用代码和输出直接说明:
输出结果:
静态成员mt初始化
static块执行
静态块内初始化sam成员变量
mt1成员初始化
TA默认构造函数被调用
-------------------------
静态成员mainTest1初始化
static 块 1 执行
静态成员mainTest2初始化
static 块 2 执行
mt1成员初始化
mt2成员初始化
TB默认构造函数被调用
[align=left]得出结论(执行顺序):[/align]
[align=left]a 静态成员变量和static块首先被初始化,其执行顺序和其在类中申明的顺序有关[/align]
b
普通成员(实例变量)初始化
c
执行构造函数
[align=left]
[/align]
[align=left]2.继承情况下Java初始化顺序[/align]
[align=left]用代码和输出直接说明:
[/align]
输出结果:
父类static 块 1 执行
父类 静态成员staticSam1初始化
父类 静态成员staticSam2初始化
父类 static 块 2 执行
子类 静态成员staticSamSub初始化
子类 静态成员staticSamSub1初始化
子类 static 块 执行
父类 sam1成员初始化
父类 sam2成员初始化
父类 Test默认构造函数被调用
子类 sam1成员初始化
子类 sam2成员初始化
子类 TestSub 默认构造函数被调用
[align=left]得出结论(初始化顺序):[/align]
[align=left]a 父类静态成员变量和static块首先被初始化,其执行顺序和其在类中申明的顺序有关[/align]
b
子类静态成员变量和static块被初始化,其执行顺序和其在类中申明的顺序有关
[align=left]c 父类普通成员(实例变量)初始化[/align]
[align=left][/align]
[align=left]d 父类构造方法被调用[/align]
[align=left][/align]
e
子类普通成员(实例变量)初始化
[align=left][/align]
f
子类构造函数被调用
用代码和输出直接说明:
package com.kael; /** * * @Title:Demo004 * @Description: * @Copyright:Copyright (c) 2012 * @Date:2012-7-25 * @author feilong.li */ public class Initialization { // 主函数 public static void main(String str[]) { TA ta = new TA(); System.out.println("-------------------------"); TB tb = new TB(); } } class MainTest { MainTest(String s) { System.out.println(s); } MainTest() { System.out.println("MainTest默认构造函数被调用"); } } class TA { static MainTest mt = new MainTest("静态成员mt初始化"); MainTest mt1 = new MainTest("mt1成员初始化"); static { System.out.println("static块执行"); mt = new MainTest("静态块内初始化sam成员变量"); } TA() { System.out.println("TA默认构造函数被调用"); } } class TB { static MainTest mainTest1 = new MainTest("静态成员mainTest1初始化"); static { System.out.println("static 块 1 执行"); } MainTest mt1 = new MainTest("mt1成员初始化"); static MainTest mainTest2 = new MainTest("静态成员mainTest2初始化"); static { System.out.println("static 块 2 执行"); } TB() { System.out.println("TB默认构造函数被调用"); } MainTest mt2 = new MainTest("mt2成员初始化"); }
输出结果:
静态成员mt初始化
static块执行
静态块内初始化sam成员变量
mt1成员初始化
TA默认构造函数被调用
-------------------------
静态成员mainTest1初始化
static 块 1 执行
静态成员mainTest2初始化
static 块 2 执行
mt1成员初始化
mt2成员初始化
TB默认构造函数被调用
[align=left]得出结论(执行顺序):[/align]
[align=left]a 静态成员变量和static块首先被初始化,其执行顺序和其在类中申明的顺序有关[/align]
b
普通成员(实例变量)初始化
c
执行构造函数
[align=left]
[/align]
[align=left]2.继承情况下Java初始化顺序[/align]
[align=left]用代码和输出直接说明:
[/align]
package com.kael; /** * * @Title:Demo004 * @Description: * @Copyright:Copyright (c) 2012 * @Date:2012-7-25 * @author feilong.li */ public class Initialization { // 主函数 public static void main(String str[]) { TB tb = new TB(); } } class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println("Sample默认构造函数被调用"); } } class TA { static { System.out.println("父类static 块 1 执行"); } static Sample staticSam1 = new Sample("父类 静态成员staticSam1初始化"); Sample sam1 = new Sample("父类 sam1成员初始化"); static Sample staticSam2 = new Sample("父类 静态成员staticSam2初始化"); static { System.out.println("父类 static 块 2 执行"); } TA() { System.out.println("父类 Test默认构造函数被调用"); } Sample sam2 = new Sample("父类 sam2成员初始化"); } class TB extends TA { static Sample staticSamSub = new Sample("子类 静态成员staticSamSub初始化"); TB() { System.out.println("子类 TestSub 默认构造函数被调用"); } Sample sam1 = new Sample("子类 sam1成员初始化"); static Sample staticSamSub1 = new Sample("子类 静态成员staticSamSub1初始化"); static { System.out.println("子类 static 块 执行"); } Sample sam2 = new Sample("子类 sam2成员初始化"); }
输出结果:
父类static 块 1 执行
父类 静态成员staticSam1初始化
父类 静态成员staticSam2初始化
父类 static 块 2 执行
子类 静态成员staticSamSub初始化
子类 静态成员staticSamSub1初始化
子类 static 块 执行
父类 sam1成员初始化
父类 sam2成员初始化
父类 Test默认构造函数被调用
子类 sam1成员初始化
子类 sam2成员初始化
子类 TestSub 默认构造函数被调用
[align=left]得出结论(初始化顺序):[/align]
[align=left]a 父类静态成员变量和static块首先被初始化,其执行顺序和其在类中申明的顺序有关[/align]
b
子类静态成员变量和static块被初始化,其执行顺序和其在类中申明的顺序有关
[align=left]c 父类普通成员(实例变量)初始化[/align]
[align=left][/align]
[align=left]d 父类构造方法被调用[/align]
[align=left][/align]
e
子类普通成员(实例变量)初始化
[align=left][/align]
f
子类构造函数被调用
相关文章推荐
- 【转】Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)
- [转] Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)
- 【转】Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)
- Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)
- Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)
- java中普通变量、静态变量、静态代码块初始化的顺序辨析
- Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
- java 静态变量与静态初始化块中变量的初始化顺序
- Java类的初始化顺序 (静态变量、静态初始化块、变量 )
- java中普通变量、静态变量、静态代码块初始化的顺序辨析
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
- Java——继承中构造器、实例域初始化顺序
- java中普通变量、静态变量、静态代码块初始化的顺序辨析
- java中普通变量、静态变量、静态代码块初始化的顺序辨析
- java 父类子类成员变量,静态变量,构造器创建先后顺序
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
- 【转】Java类的初始化顺序 (静态变量、静态初始化块、变量
- Java中静态变量、块、非静态变量、块和构造器的初始化顺序
- Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
- Java初始化顺序总结及其程序执行过程图- 静态变量、静态代码块、成员变量、构造函数