java基础 Day06 静态/非静态变量、静态/非静态代码块、构造方法;垃圾回收

1. 运行以下代码观察结果,总结下代码块和变量的初始化顺序(简答题)

public class ClassInitOrderTest {
    public static String staticField = "static field";
    static {
        System.out.println(staticField);
        System.out.println("static block");
    }
    private String field = "member field";
    {
        System.out.println(field);
        System.out.println("non-static block");
    }
    public ClassInitOrderTest() {
        System.out.println("constructor");
    }
    public static void main(String[] args) {
        new ClassInitOrderTest();
    }
}

参考答案:

static field
static block
member field
non-static block
constructor

2. 测试多个子类继承的初始化顺序,要求包含静态变量、静态代码块、非静态代码块、构造方法、成员变量。观察测试结果,总结下初始化顺序。

Demo02.java

package com.ly.demo06;
//测试多个子类继承的初始化顺序,要求包含静态变量、静态代码块、非静态代码块、构造方法、成员变量。
class Father{
	//静态变量
	public static String staticid="Father的staticid 静态变量";
	//成员变量
	public String nostaticid="Father的nostaticid 非静态变量";
//	静态代码块
	static{
		System.out.println(staticid);
		System.out.println("Father的静态代码块");
	}
//	非静态代码块
	{
		System.out.println(nostaticid);
		System.out.println("Father的非静态代码块");
	}
//	构造方法
	public Father(){
        System.out.println("Father的构造方法");
	}
}
class Son1 extends Father{
	//静态变量
	public static String staticIdSon1="Son1的staticid 静态变量";
	//成员变量
	public String nostaticIdSon1="Son1的nostaticid 非静态变量";
	static{
		System.out.println(staticIdSon1);
		System.out.println("Son1的静态代码块");
	}
//	非静态代码块
	{
		System.out.println(nostaticIdSon1);
		System.out.println("Son1的非静态代码块");
	}
//	构造方法
	public Son1(){
        System.out.println("Son1的构造方法");
	}
}
class Son2 extends Father{
	//静态变量
	public static String staticIdSon2="Son2的staticid 静态变量";
	//成员变量
	public String nostaticIdSon2="Son2的nostaticid 非静态变量";
	static{
		System.out.println(staticIdSon2);
		System.out.println("Son2的静态代码块");
	}
//	非静态代码块
	{
		System.out.println(nostaticIdSon2);
		System.out.println("Son2的非静态代码块");
	}
//	构造方法
	public Son2(){
        System.out.println("Son2的构造方法");
	}
}
public class Demo02 {

	public static void main(String[] args) {
//        new Father();
        new Son1();
        System.out.println();
        new Son2();
	}

}

输出:
在这里插入图片描述

参考答案:

执行顺序:
1、类内容(静态变量、静态初始化块) => 实例内容(变量、初始化块、构造器)
2、父类的(静态变量、静态初始化块)=>子类的(静态变量、静态初始化块)=> 父类的(变量、初始化块、构造器)=> 子类的(变量、初始化块、构造器) (初始化块 => 构造器)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值