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

java-core:ClassLoader详解,更新1

时间:2018-01-02 01:17:30      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:log   com   instance   loader   分配   nbsp   图片   info   oid   

先来看一个例子:

package core.java;

class SingleTon{
    private static SingleTon instance = new SingleTon();
    public static int num1;
    public static int num2 = 0;
    
    private SingleTon(){
        num1++;
        num2++;
    }
    
    public static SingleTon getInstance(){
        return instance;
    }
}

public class ClassLoaderTest {

    public static void main(String[] args) {
        
        SingleTon single = SingleTon.getInstance();
        System.out.println("num1: "+single.num1);
        System.out.println("num1: "+single.num2);
    }
}

输出结果是多少呢?也许很多人会犯错吧

运行一下吧:

技术分享图片

这里涉及到类的加载和初始化过程:

1、类在被主动调用时,触发类的加载,jvm查找并加载类的二进制数据到内存

2、jvm检查class文件的正确性,因为防止恶意手动生成的class文件

3、为类的静态变量分配内存,并初始化默认值。

这一步是关键,此处的初始化默认值并非赋值,比如此时 instance  的值是null,num1是0,num2是0。而此时num2的0 不是‘=’赋值的0

4、把类的符号引用转换为直接引用。即:把引用变成指针,这是java中的指针,java在应用开发过程中是没有指针的,但是jvm里是有的。

5、初始化

  a) instance = new SingleTon () 调用构造方法,num1 和num2 的值被赋值为1

  b) num1用户没有给默认值,维持1;

  c) num2用户给了默认值0,将0赋给了num2;

 

 

(未完待续)

更新1:2018-01-01,举个例子

 

java-core:ClassLoader详解,更新1

标签:log   com   instance   loader   分配   nbsp   图片   info   oid   

原文地址:https://www.cnblogs.com/tensorflow-zh/p/8169347.html

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