专栏首页osc同步分享-java技术分享站java的静态属性,静态块,构造函数的执行顺序

java的静态属性,静态块,构造函数的执行顺序

今天为了搞清楚实例化一个对象时其属性等的实例化顺序,写了下面的例子来探究:

实例化一个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

结论(实例化顺序):

  1. 父类静态的属性
  2. 父类静态的代码块
  3. 子类静态的属性
  4. 子类静态的代码块
  5. 父类普通属性
  6. 父类普通代码块
  7. 父类构造函数
  8. 子类普通属性
  9. 子类普通代码块
  10. 子类构造函数

静态的东西只在第一次实例化的时候执行

原则:先静态后非静态、先父类后子类

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java获取视频文件的长度

    import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.EncoderExce...

    yawn
  • @Scheduled 注解的使用

    1.启用定时任务(@EnableScheduling) package com.example.demo; import org.springframewor...

    yawn
  • Timer类的schedule()方法

    timer.schedule(new MyTask(),long time1,long timer2); 第一个参数,是 TimerTask 类,在包:impo...

    yawn
  • 每日一练(2017/5/23)

    Java基础 | 数据库 | Android | 学习视频 | 学习资料下载 课前导读 ●回复"每日一练"获取以前的题目! ●答案公布时间:为每期发布题目的第二...

    Java学习
  • Python编写人机对战小游戏(抓狐狸)(2)

    很久很久以前,在公众号里推送过一个抓狐狸游戏,详见Python编写人机对战小游戏(抓小狐狸),还有免费视频可以看微课|中学生可以这样学Python(例4.6):...

    Python小屋屋主
  • Facebook、Google、Amazon 是如何高效开会的

    作者 孔若诚 杏仁产品经理,业余美剧、设计、哲学爱好者。头像是我偶像。 会议是工作中绕不开的一部分,许多人都听说过,在一项研究中发现,语言在我们的沟通中只占了...

    企鹅号小编
  • express4.2获取参数和视图

    1.获取参数 router.get('/', function(req, res) { //console.log(req.query.a); //get a...

    苦咖啡
  • SecureCRT设置背景颜色

    打开SecureCRT的会话,右键点击选项卡,在弹出的菜单里选择“Session Options”

    似水的流年
  • Java Optional学习笔记

    orElse: 如果Optional对象存在,返回原始对象,否则返回orElse里构造的新对象:

    Jerry Wang
  • iOS Label加载HTML

    剑行者

扫码关注云+社区

领取腾讯云代金券