java中类初始化变量和方法的执行先后顺序

本文深入解析Java中初始化的执行顺序,包括静态代码块、非静态代码块、变量及方法的初始化过程,通过具体实例展示了父类与子类、静态与非静态元素的初始化先后顺序。

形如

static{

//code

}

称为静态代码块

{

//code

}

不加static修饰的是初始化代码块

总体执行顺序为:

1.父类先于子类

2.变量(属性)先于方法

3.静态先于非静态

以下提供一个实例:

import java.io.*;
import java.util.*;
public class Main extends Parent{
	public static String ss="子类静态变量";
	public String sf="子类变量";
	private int sc=initc2();
	int initc2(){
	System.out.println("3.子类成员变量赋值:---> sc的值"+sc);
	this.sc=12;
	System.out.println("3.子类成员变量赋值:---> sc的值"+sc);
	return sc;
	}
	static{
		System.out.println(ss);
		System.out.println("子类静态初始化块");
	}
	{
		System.out.println(sf);
		System.out.println("子类初始化块");
	}
	public Main(){
		System.out.println("子类构造器");
		System.out.println("i="+i+"j="+j);
	}
	public static void main(String[] ars){
		System.out.println("子类main方法");
		new Main();
        return;
    }
}

class Parent{
	public static String ps="父类静态变量";
	public String pf="父类变量";
	protected int i=0;
	protected int j=0;
	private int c=initc();
	int initc(){
	System.out.println("3.父类成员变量赋值:---> c的值"+c);
	this.c=12;
	System.out.println("3.父类成员变量赋值:---> c的值"+c);
	return c;
	}
	static{
		System.out.println(ps);
		System.out.println("父类静态初始化块");
	}
	{
		System.out.println(pf);
		System.out.println("父类初始化块");
	}
	public Parent(){
		System.out.println("父类构造器");
		System.out.println("i="+i+"j="+j);
		j=20;
	}
}

其运行结果为:

父类静态变量
父类静态初始化块
子类静态变量
子类静态初始化块
子类main方法
3.父类成员变量赋值:---> c的值0
3.父类成员变量赋值:---> c的值12
父类变量
父类初始化块
父类构造器
i=0j=0
3.子类成员变量赋值:---> sc的值0
3.子类成员变量赋值:---> sc的值12
子类变量
子类初始化块
子类构造器
i=0j=20

注意在静态变量和静态代码块均初始化完成后才执行子类的main方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值