java中静态变量、静态块、静态方法与实例变量、实例块、实例方法执行顺序

一、相关含义

1.静态变量

static int num = 4;

2.静态块

static {                              		  // 3.加载静态块
        System.out.println("这个是静态块");
    }

3.静态方法

static void method()                    // 静态方法,调用的时候才加载
    {
        System.out.println("这个是静态方法!");
    }

4.实例变量
int a = 5; 

5.实例块

{ 
        System.out.println("这个是实例块2" + "---实例值变量a:" + a);           
        a=4;
}

6.实例方法

void print() {
    	System.out.println("这个是实例方法!");
    }

二、执行流程:

  • 类还没有被加载情况:(含有继承情况,若无则忽略以下父类,只看子类即可):
      1、先执行父类的静态代码块和静态变量初始化,且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关
      2、执行子类的静态代码块和静态变量初始化
      3、执行父类的实例态代码块和实例变量初始化 ,执行顺序只跟代码中出现的顺序有关
      4、执行父类的构造函数
      5、执行子类的实例态代码块和实例变量初始化 ,执行顺序只跟代码中出现的顺序有关
      6、执行子类的构造函数


  • 类已经被加载情况:
      静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法,调用想要执行方法就执行该方法

  • 代码执行演示:
public class Test {                                  //1.加载Test类
	public static void main(String[] args) {
		System.out.println("静态变量值:" + Test.num);
        Test t = new Test();                         //4.new一个类
        System.out.println("实例变量值a:" + t.a);
        System.out.println("静态变量值:" + Test.num);
        Test.method();   //static方法不同于static块,不会自动执行的,只有你在代码中显示的调用,即类名.静态方法名();才会执行
        t.print();    //同样调用才会执行
    }

    
	
    {
        num += 3;                                                   //  在实例块中改变静态变量值,可以验证实例块在静态之后
        System.out.println("这个实例块1");           //5.实例块和实例变量由编写先后决定
        a = 3;
    }

    	int a = 5;                          //6.,按照顺序加载变量,验证时可以调换实例变量与实例块位置,然后在main函数中输出
    
    { // 成员变量第三个
        System.out.println("这个是实例块2" + "---实例值变量a:" + a);           //7.执行第二个的代码块
        a=4;
    }
    

    Test() { // 类的构造函数,第四个加载
        System.out.println("这个是构造函数");           //8.最后加载构造函数,完成对象的建立
    }
    static int num = 4;                    //2.静态变量和静态代码块的加载顺序由编写先后决定 
    static {                              		  // 3.加载静态块
        System.out.println("这个是静态块");
    }

    static void method()                    // 静态方法,调用的时候才加载
    {
        System.out.println("这个是静态方法!");
    }
    void print() {
    	System.out.println("这个是实例方法!");
    }
   
}




参考:https://www.cnblogs.com/leiqiannian/p/7922824.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值