类中各种代码块的执行流程-Java笔记

本文介绍Java代码块执行流程。先阐述局部、初始化、静态代码块的定义,接着用代码测试,最后分析结果。发现执行顺序为先静态代码块,再main方法代码块,创建对象时先初始化代码块,后构造器代码。还解释了静态代码块先于main方法输出的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、需要了解的知识点

  1. 局部代码块:直接定义在方法内部的代码块,常与if,while等关键字联合使用。
  2. 初始化代码块(构造代码块):直接定义在类中的代码块,每次创建对象时被调用,实质上是作为构造器的前几行语句来执行的(详细原因(链接目录的第三章第4条))。
    在这里插入图片描述
  3. 静态代码块:定义在类中且使用static修饰的代码块。

二、用代码进行测试

  1. 测试代码如下:
    public class Test {
    	//初始化代码块
    	{
    		System.out.println("初始化代码块");
    	}
    	//静态代码块
    	static{
    		System.out.println("静态代码块");
    	}
    	//构造器
    	public Test(){
    		System.out.println("静态构造器代码块");	
    	}
    	public static void main(String[] args) {
    		System.out.println("main方法代码块");
    		Test test = new Test();
    	}
    }
    
  2. 运行结果如下:
    在这里插入图片描述

三、对测试结果分析

1、 由上图可以看到代码块的执行流程,先执行静态代码块,再执行main方法的代码块,且在创建对象时先执行初始化代码块,后执行构造器中的代码。
2、 结果如上图所示,但是我们应该产生疑问,我们知道main方法是程序的入口方法,但是为什么静态代码快先于main方法中的语句输出呢?
- 原因是,静态成员随着字节码的加载也被加载进JVM,此时main方法还没有被JVM调用被执行,也就是说,字节码被加载进JVM后,此时静态成员已经存在于内存中了(若你不了解Java中成员的内存分布,请点击此处了解,这篇文章是写的类的变量的内存分布,类的成员也适用),而后JVM才调用的main方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值