Java根底学习1ITeye - 超凡娱乐

Java根底学习1ITeye

2019-01-11 19:22:51 | 作者: 曼凡 | 标签: 初始化,办法,加载 | 浏览: 528

Java加载次序曾经没有怎样深究,这段时刻再看《s深入研究虚拟机》,测验了下加载次序
代码
/**
 * p Description:TODO /p 
 * @author esdong
 * 2015-10-14
public class TestLoad {
 public static TestLoad test = new TestLoad();
 public static int a = 1;
 public static int b = 2;
 public int c = 1;
 private TestLoad(){
 a ++;
 b ++;
 c ++;
 public static TestLoad getInstence (){
 return test;
 public static void main(String[] args) {
 TestLoad test1 = TestLoad.getInstence();
 System.out.println(test1.a);
 System.out.println(test1.b);
 System.out.println(test1.c);
}


运转成果了下测验成果,与曾经了解的的确相同
成果:
初始化----
1
2
2

并不是幻想的2,3,2

这个的确和虚拟机加载的办法有差异,次序应该是
1、初始化时,TestLoad test =null, int a, int b,都会被放入java栈中,此刻a 和 b均为初始值0;而类信息,静态办法。办法润饰等懊悔被放入办法区
2、履行 new TestLoad() 初始化办法,此刻a和b均为1,
3、加载静态变量 ,此刻a和b从头赋值,,
4、关于实例变量,在调用时才会生成内存空间,不管在什么时候调用。所以c一调用,就会分配内存空间而且赋值,所以第一次便是1;

将代码修改下就能彻底看出加载次序

public class TestLoad {
 public static TestLoad test = new TestLoad();
 public static int a = 1;
 public static int b = 2;
 public int c = 1;
 System.out.println(a);
 System.out.println(b);
 System.out.println(c);
 static{
 System.out.println("静态办法----");
 private TestLoad(){
 System.out.println("初始化----");
 a ++;
 b ++;
 c ++;
 private void test(){
 System.out.println("初始化test----");
 public static TestLoad getInstence (){
 System.out.println("实例调用---");
 return test;
 public static void main(String[] args) {
 TestLoad test1 = TestLoad.getInstence();
 test1.test();
 System.out.println(test1.a);
 System.out.println(test1.b);
 System.out.println(test1.c);
}


输出成果为:

0
初始化----
静态办法----
实例调用---
初始化test----

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章