码迷,mamicode.com
首页 > 编程语言 > 详细

Java静态代码块和非静态代码块、类加载、构造对象的机制

时间:2015-08-17 19:59:07      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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方法运行的时候哦)。

执行顺序是:

静态成员变量初始化

静态代码块调用

动态成员变量初始化

非静态代码块调用

构造方法调用


Java静态代码块和非静态代码块、类加载、构造对象的机制

标签:

原文地址:http://my.oschina.net/happyBKs/blog/493614

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!