A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 guyouzhong 于 2017-1-15 00:37 编辑

今天在看单例设计模式的时候突然发现一个问题,突然在感慨真的很多小知识点都是这种小的发现,我们一步步去探索才能真正理解的,加油。

具体看代码:
[Java] 纯文本查看 复制代码
public class Intance01 {
        public static void main(String[] args) {
                Abs.getInstance();//获取实例
        }
}
/**@author tony*/
class Abs{
        private static Abs abs = new Abs();
        private static int a = 11;
        static{
                System.out.println("static===="+a+"===");
                a = 22;
        }
        {
                System.out.println("初始化===="+a+"===");
                a = 33;
        }
        private Abs(){
                System.out.println("构造===="+a+"===");
        }
        public static Abs getInstance(){
                return abs;
        }
}
运行结果为:
初始化====0===
构造====33===
static====11===

分析运行过程:
第一步:主函数中Abs.getInstance();执行时,Abs类需要加载;执行了private static Abs abs = new Abs();
第二步:运行初始化代码块,因为此时a还没有进行显式初始化所以输出 a = 0;
第三步:运行构造函数,输出a = 33;
第四步:运行private static int a = 11;,a 的显式初始化
第五步:静态代码块执行,输出结果为 a = 11;

----------------------------------------------------------
下面我将代码颠倒了一下顺序:
[Java] 纯文本查看 复制代码
 * 静态代码、静态变量遵循哪个在前面,哪个先加载个原则.
/** @author tony*/
class Abs{
	private static int a = 11;
	static{
		System.out.println("static===="+a+"===");
		a = 22;
	}
	{
		System.out.println("初始化===="+a+"===");
		a = 33;
	}
	private static Abs abs = new Abs();
	private Abs(){
		System.out.println("构造===="+a+"===");
	}
	public static Abs getInstance(){
		return abs;
	}
}

输出结果为:
   static====11===
   初始化====22===
   构造====33===

分析执行过程:
第一步:主函数中执行Abs.getInstance()时,Abs类需要加载,然后执行private static int a = 11;
第二步:静态代码块,输出结果为:a = 11;
第三步:private static Abs abs = new Abs();
第四步:执行构造代码块并输出a = 22;
第五步:执行构造函数,输出 a  = 33;

通过以上的两个案例的分析可以得出:类在加载的时候,静态代码、静态变量遵循哪个在前面,哪个先加载个原则.

3 个回复

倒序浏览
回复 使用道具 举报

你这沙发抢的可以,也不评价一下,╮(╯▽╰)╭
回复 使用道具 举报
guyouzhong 发表于 2017-1-15 00:39
你这沙发抢的可以,也不评价一下,╮(╯▽╰)╭

以后也就静态代码块见得多点。。。其他。。。我上完基础班到现在没遇见过,静态代码块还是看系统源码的时候见到的,自己从来没用过
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马