java类加载过程

本文探讨了Java中类加载和对象初始化的过程。类加载包括加载、验证、准备、解析和初始化五个步骤。对象初始化顺序遵循先父类后子类的规则,包括静态属性和代码块、构造器的执行。示例代码展示了这一过程,输出结果揭示了初始化的具体顺序。
摘要由CSDN通过智能技术生成

类加载过程

  1. 加载:把class文件加载进内存
  2. 验证:class文件的有效性,安全性,是否符合jvm的规则
  3. 准备:为类属性分配内存并设置初始值,
  4. 解析:把常量池中的符号引用替换成地址引用
  5. 初始化:class对象的初始化,执行静态代码块和静态属性的赋值

对象初始化过程

父类代码

package com.example.demo;

public class Parent {

	static {
		s = "111";
		System.out.println("init parent static code");
	}
	
	protected static String s = asd();
	
	static {
		s = "222";
		System.out.println("init parent static code 1");
	}
	
	public Parent(){
		System.out.println("init Parent 构造器");
	}
	public static String asd() {
		System.out.println("init parent static Field");
		return "333";
	}
}

子类代码

package com.example.demo;

public class Child extends Parent{

	static {
		s1 = "111";
		System.out.println("init child static code");
	}
	static {
		s1 = "222";
		System.out.println("init child static code 1");
	}
	protected static String s1 = initField();
	
	public static String initField() {
		System.out.println("init child static Field");
		return "333";
	}
	
	public Child() {
		System.out.println("init child 构造器");
	}
	
	public static void main(String[] args) {
		new Child();
        System.out.println(child.s);
		System.out.println(child.s1);
	}

}

结果:控制台打印

init parent static code
init parent static Field
init parent static code 1
init child static code
init child static code 1
init child static Field
init Parent 构造器
init child 构造器
222
333

对象的初始化顺序:

1、父类静态属性赋值、代码块 按照书写顺序执行(静态属性会在初始化之前分配好内存地址)。

2、子类静态属性赋值、代码块 按照书写顺序执行

3、父类构造器

4、子类构造器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值