栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础学习之路——代码块及对象的加载顺序问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础学习之路——代码块及对象的加载顺序问题

代码块

常见代码块及特性
静态代码块:
static{ } 类中方法外
随着类的加载而加载,并且只加载一次,多个之间按代码顺序执行,适用于类存在就使用的代码。
构造代码块:
{ } 类中方法外
随着构造方法的执行而执行,每一次执行构造方法都会执行代码块,并且在构造方法的代码之前执行。适用于多个构造方法中 有共性代码时,可提取到代码块中执行。
局部代码块:
{ } 方法中
主要是用来限定变量的作用域。

对象的加载顺序问题

类的成员
属性,方法,构造方法,代码块。
执行步骤

public class 对象的加载顺序 {
	public static void main(String[] args) {
		new F().fun();
	}
}
class F{
	static{
		System.out.println("这是F类的静态代码块。。。。5");
	}
	{
		System.out.println("这是F类的构造代码块。。。。6");
	}
	int a = setA();
	private int setA() {
		System.out.println("这是F类的显式初始化。。。4");
		return 0;
	}
	public void fun(){
		System.out.println("这是F类的非静态方法。。。1");
	}
	public F(){
		System.out.println("这是F类的无参构造方法。。。。2");
	}
	public F(int a){
		System.out.println("这是F类的有参构造方法。。。。3");
	}
}

这是F类的静态代码块。。。。5
这是F类的构造代码块。。。。6
这是f类的显式初始化。。。4
这是F类的无参构造方法。。。。2
这是F类的非静态方法。。。1

Process finished with exit code 0

①判断对象的加载顺序,该类是否存在在方法区中,若存在,直接使用,若不存在,向硬盘上进行加载到方法区;
②查找main方法压栈执行;
③判断F类是否存在于方法区,若存在,直接使用,若不存在,向硬盘上进行加载到方法区;
④由于new关键字,在堆中开辟F类的对象空间,并且对属性a 进行默认初始化;
⑤根据构造方法,选择构造方法进行执行;
⑥在执行构造方法之前,该位置需要执行隐式三步:
1>super(参数);
2>构造代码块;
3>属性显式初始化;
其中:2和3根据程序的书写顺序,顺序执行。
⑦隐式三步执行完毕之后,才会执行构造方法里面的代码;
⑧如果有方法调用,此时再执行方法,没有不执行。

总结:
1.先加载类:考虑继承,先父后子,静态方法不调用不执行;静态属性,静态代码块顺序执行;
2.对象:构造方法的执行:
a.隐式三步:super(参数),考虑继承 构造代码块 属性的显示初始化,顺序执行;
b.构造方法的代码的执行;
c.有方法调用才会执行。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584868.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号