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

java关于类加载的面试题

时间:2017-10-04 15:21:09      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:结果   赋值   静态   out   test   错误   public   过程   pre   

---面试题

class SingleTon {
    private static SingleTon singleTon = new SingleTon();
    public static int count1;
    public static int count2 = 0;

    private SingleTon() {
        count1++;
        count2++;
    }

    public static SingleTon getInstance() {
        return singleTon;
    }
}

public class Test {
    public static void main(String[] args) {
        SingleTon singleTon = SingleTon.getInstance();
        System.out.println("count1=" + singleTon.count1);
        System.out.println("count2=" + singleTon.count2);
    }
}

 

要求写出打印结果:

这题牵扯打类的加载,首先分析:

1:SingleTon singleTon = SingleTon.getInstance();调用了类的SingleTon调用了类的静态方法,触发类的初始化   详解:http://www.cnblogs.com/zhangyu0217----/p/7625536.html

2:类加载的时候在准备过程中为类的静态变量分配内存并初始化默认值 singleton=null count1=0,count2=0

3:类初始化化,为类的静态变量赋值和执行静态代码快。singleton赋值为new SingleTon()调用类的构造方法

4:调用类的构造方法后count=1;count2=1(错误答案)

5:继续为count1与count2赋值,此时count1没有赋值操作,所有count1为1,但是count2执行赋值操作就变为0

 

所以正确答案是;

count1=1

count2=0

其实 类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。

这道题的关键就是在于类在初始化的时候是先给构造方法中的属性赋值,还是类在初始化(类加载过程的最后一步)的时候赋值。

 

java关于类加载的面试题

标签:结果   赋值   静态   out   test   错误   public   过程   pre   

原文地址:http://www.cnblogs.com/zhangyu0217----/p/7625548.html

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