博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java静态代码块和非静态代码块、类加载、构造对象的机制
阅读量:5881 次
发布时间:2019-06-19

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

hot3.png

温故而知新,代码块这东西时间一长一些东西容易忘记,比如静态代码块、非静态代码款、静态成员变量初始化、动态成员变量初始化、构造方法调用、类加载等等的顺序机制是怎么样的?

话不多说了,一个例子足以说明一切:

package com.collectiontest;import org.junit.Test;public class BasicTest {	@Test	public void testBlock()	{		System.out.println("m1:");		Mimi m1=new Mimi();		System.out.println("m2:");		Mimi m2=new Mimi();	}}class Mimi {	public static int si=0; 	int di=si;	static{		si++;		System.out.println("static block1: si="+si);	}		{		//si*=2;		System.out.println("block2: si="+si+", di="+di);	}		static{		si++;		System.out.println("static block2: si="+si);	}	public Mimi() {		di=10;		System.out.println("constructor: si="+si+", di="+di);	}		}

执行结果:

m1:

static block1: si=1

static block2: si=2

block2: si=2, di=2

constructor: si=2, di=10

m2:

block2: si=2, di=2

constructor: si=2, di=10

这说明:静态成员变量初始化和静态代码块都是在第一次加载这个类的时候被调用的(不是main方法运行的时候哦)。

执行顺序是:

静态成员变量初始化

静态代码块调用

动态成员变量初始化

非静态代码块调用

构造方法调用

转载于:https://my.oschina.net/happyBKs/blog/493614

你可能感兴趣的文章
搭建DHCP服务器和配置
查看>>
Java Web开发Session超时设置
查看>>
linux下,配置jdk、安装weblogic11g及新建域
查看>>
Ceph:Unknown lvalue 'TasksMax' in section 'Service
查看>>
Lucene的API使用
查看>>
一个软件包下载地址
查看>>
用virtualbox虚拟机无法上网的解决方法
查看>>
对“Eloquent ORM —— 关联关系”的重点笔记
查看>>
谢烟客---------Linux之ip及配置网络连接方法(ifcfg、ip、配置文件)
查看>>
【存储】NFS搭建
查看>>
iOS 后台进入前台刷新当前界面
查看>>
【C语言】用c编写乘法口诀表
查看>>
接口限流实践
查看>>
VIEW 视图DNS +VARNISH 缓存服务器
查看>>
Bootstrap 类 解析
查看>>
PyTorch快速入门教程六(使用LSTM做图片分类)
查看>>
什么是go语言
查看>>
Java中文排序完美新解
查看>>
Hadoop jps正确使用流程及报错处理
查看>>
docker learn
查看>>