博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[java]静态成员变量/静态代码块/非静态代码块执行顺序
阅读量:2215 次
发布时间:2019-05-07

本文共 1009 字,大约阅读时间需要 3 分钟。

先给出代码,大家可以先思考一下将会打印什么内容:

public class StaticTest {	public static void main(String[] args) {		staticFunction();		System.out.println("main中b:"+b);	}	static StaticTest staticTest=new StaticTest();	static {		System.out.println(1);	}	{		System.out.println(2);	}	StaticTest(){		System.out.println(3);		System.out.println("a="+a+"b="+b);	}	private static void staticFunction() {		System.out.println(4);	}	int a=100;	static int b=200;}

思考…

思考…
时间到,结果为:
在这里插入图片描述
有没有出乎大家的意料呢.

代码中从头到尾依次是

main方法
静态成员变量
静态代码块
非静态代码块 (创建一个对象的时候就调用一次非静态代码块,执行顺序在构造器之前)
构造器
私有静态成员方法
成员变量
静态变量

static修饰的属性从上到下依次赋值,虽然main方法也是static修饰,但是main方法比较特殊,会在最后执行,因此先放一边.

在这里插入图片描述
(参考博客:)
为了赋值给 staticTest,需要先创建StaticTest对象,调用构造器之前会先调用非静态代码块 (创建一个对象的时候就调用一次非静态代码块,执行顺序在构造器之前),第一次打印,打印2.

随后调用构造器,第二次打印,打印3,接着执行System.out.println(“a=”+a+“b=”+b)语句,成员变量a已在创建过程完成了赋值,而静态变量b虽然已经在堆中开辟了内存空间,但是因为位置在最后一个static还没有进行赋值,此时仍为初始值0,所以第三次打印,打印a=100b=0.

完成赋值,执行静态代码块,第四次打印,打印1.
接着给静态变量b赋值为200,最后开始执行main方法,调用了私有静态方法staticFunction,第五次打印,打印4.最后第六次打印,打印main中b:200.

我的另一篇文章 构造器和成员变量默认赋值的执行顺序

转载地址:http://vczfb.baihongyu.com/

你可能感兴趣的文章
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>
TP5.1模板布局中遇到的坑,配置完不生效解决办法
查看>>
PHPstudy中遇到的坑No input file specified,以及传到linux环境下遇到的坑,模板文件不存在
查看>>
TP5.1事务操作和TP5事务回滚操作多表
查看>>
composer install或composer update 或 composer require phpoffice/phpexcel 失败解决办法
查看>>
TP5.1项目从windows的Apache服务迁移到linux的Nginx服务需要注意几点。
查看>>
win10安装软件 打开时报错 找不到 msvcp120.dll
查看>>
PHPunit+Xdebug代码覆盖率以及遇到的问题汇总
查看>>
PHPUnit安装及使用
查看>>
PHP项目用xhprof性能分析(安装及应用实例)
查看>>
composer安装YII
查看>>
Sublime text3快捷键演示
查看>>
sublime text3 快捷键修改
查看>>