java的静态属性,静态块,构造函数的执行顺序
2016-08-01 00:00
441 查看
摘要: java的静态属性,静态块,构造函数的执行顺序
今天为了搞清楚实例化一个对象时其属性等的实例化顺序,写了下面的例子来探究:
实例化一个C的对象,其中,A为其静态属性,B为其普通属性;D为C的父类,E为D的静态属性,F为D的普通属性;C中还包含了静态代码块和普通代码块。
运行结果:
-------第1次实例化-------
父类的静态属性E
构造静态属性A
静态代码块
父类的普通属性F
构造父类D
构造普通属性B
普通代码块
构造函数C
-------第2次实例化-------
父类的普通属性F
构造父类D
构造普通属性B
普通代码块
构造函数C
结论(实例化顺序):
父类静态的属性
父类静态的代码块
子类静态的属性
子类静态的代码块
父类普通属性
父类普通代码块
父类构造函数
子类普通属性
子类普通代码块
子类构造函数
静态的东西只在第一次实例化的时候执行
原则:先静态后非静态、先父类后子类
今天为了搞清楚实例化一个对象时其属性等的实例化顺序,写了下面的例子来探究:
实例化一个C的对象,其中,A为其静态属性,B为其普通属性;D为C的父类,E为D的静态属性,F为D的普通属性;C中还包含了静态代码块和普通代码块。
package com.yawn; public class Test3 { public static void main(String[] args) { System.out.println("-------第1次实例化-------"); new C(); System.out.println("-------第2次实例化-------"); new C(); } } class A { public A(){ System.out.println("构造静态属性A"); } } class B { public B(){ System.out.println("构造普通属性B"); } } class E { public E(){ System.out.println("父类的静态属性E"); } } class F { public F(){ System.out.println("父类的普通属性F"); } } class D { static E e = new E(); F f = new F(); public D(){ System.out.println("构造父类D"); } } class C extends D{ /** * 静态代码块先于构造器执行 普通块先于构造块 只执行一次 * 凡是静态的与对象无关,先于对象存在的; 凡是静态的都是共享的 */ B b = new B(); static A a = new A(); { System.out.println("普通代码块"); } static { System.out.println("静态代码块"); } public C(){ System.out.println("构造函数C"); } }
运行结果:
-------第1次实例化-------
父类的静态属性E
构造静态属性A
静态代码块
父类的普通属性F
构造父类D
构造普通属性B
普通代码块
构造函数C
-------第2次实例化-------
父类的普通属性F
构造父类D
构造普通属性B
普通代码块
构造函数C
结论(实例化顺序):
父类静态的属性
父类静态的代码块
子类静态的属性
子类静态的代码块
父类普通属性
父类普通代码块
父类构造函数
子类普通属性
子类普通代码块
子类构造函数
静态的东西只在第一次实例化的时候执行
原则:先静态后非静态、先父类后子类
相关文章推荐
- java 静态属性 静态代码块 静态方法声明 构造块 构造函数 动态属性 执行顺序
- Java类静态属性、静态块、非静态属性、非静态块、构造函数在初始化时的执行顺序
- 静态块,静态属性,成员变量,静态方法,构造函数执行顺序
- Java类静态属性、静态块、非静态属性、非静态块、构造函数在初始化时的执行顺序
- Java类中静态属性、静态语句块、属性、初始化语句块、构造函数之间的执行顺序
- Java类静态属性、静态块、非静态属性、非静态块、构造函数在初始化时的执行顺序
- 关于Java中静态代码块以及构造函数的执行先后顺序
- java中静态块,静态属性,方法的加载顺序
- java中的静态代码块、构造代码块、构造函数执行顺序
- 三、Java基础---------关于继承、构造函数、静态代码块执行顺序示例讲解
- JAVA 构造函数,静态块,非静态块执行顺序
- 举例说明java中静态代码块、非静态代码块、构造函数的执行顺序
- 关于Java中静态代码块以及构造函数的执行先后顺序
- 关于java中子类,父类中,静态代码块: staic{},动态代码块:{},构造方法,类属性,对象属性等执行顺序做个总结:
- [Java]Java静态代码块、静态函数、动态代码块、构造函数等的执行顺序
- 关于静态块、静态属性、构造块、构造方法的执行顺序
- [java起步]构造函数、构造代码快、静态代码块的执行顺序
- Java父子类静态代码/非静态代码/构造函数执行顺序
- 转来的:java中静态块和构造函数的执行顺序问题
- Java中静态代码块、非静态代码块和构造函数的执行顺序