一个大公司JAVA考题的问题
来源:互联网 发布:oppox907刷机软件 编辑:程序博客网 时间:2024/05/22 00:44
class Singleton
{
1) private static Singleton obj = new Singleton();
2) public static int counter1;
3) public static int counter2 = 0;
4) private Singleton()
{
counter1++;
counter2++;
}
5) public static Singleton getInstance()
{
return obj;
}
}
public class MyMain {
public static void main(String[] args) {
Singleton obj = Singleton.getInstance();
System.out.println("obj.counter1=="+obj.counter1);
System.out.println("obj.counter2=="+obj.counter2);
}
}
谁能告诉我这个答案为啥是
obj.counter1==1
obj.counter2==0
吗?
1,2,3,4,5的执行顺序如何
这是一道考java基本功的很好的题目。
下面我们分析以下它的执行过程:
运行MyMain之后,
首先执行Singleton.getInstance();
它的执行过程是这样:
首先是Singleton类的装载,然后JVM会初始化Singleton类,初始化的过程中,需要初始化静态变量。就是按顺序依次初始化:
1、初始化private static Singleton obj = new Singleton();new会调用构造函数,因为构造函数使用了counter1和counter2,所以先让counter1后变成1,然后让counter2变为1。
2、继续初始化public static int counter1; 因为没有赋值,所以couter1仍然是1
3、继续初始化public static int counter2 = 0,这时候有赋值运算,所以counter2变成了0
非常简单吧?请程序员们注意打好基础。
修改
class Singleton{
static{
System.out.println("载入类");
}
private static Singleton obj = new Singleton();
static{
System.out.println("obj初始化完毕");
}
public static int counter1;
static{
System.out.println("counter1初始化完毕");
System.out.println("counter1="+counter1);
}
public static int counter2 = 0;
static{
System.out.println("counter2初始化完毕");
System.out.println("counter2="+counter2);
}
private Singleton(){
System.out.println("进入构造函数");
counter1++;
System.out.println("counter1++:"+counter1);
counter2++;
System.out.println("counter2++:"+counter2);
System.out.println("退入构造函数");
}
public static Singleton getInstance(){
return obj;
}
}
public class MyMain {
public static void main(String[] args) {
Singleton obj = Singleton.getInstance();
System.out.println("obj.counter1=="+obj.counter1);
System.out.println("obj.counter2=="+obj.counter2);
}
}
- 一个大公司JAVA考题的问题
- 一个大公司程序员的牢骚
- 大公司的一个部门干不过小公司?
- 各大公司面视中问到过的问题
- 面试宝典:破解最难回答的23个问题及8大面试通关考题
- 外企面试的10大必考题
- java面试题十八 switch一个考题
- 大公司的Java面试题集
- 大公司的Java面试题集
- 大公司的Java面试题集
- Java只是大公司的一种策略
- 各大公司的java面试题
- 大公司面试喜欢问的Java问题都有哪些?
- 某X公司的C/C++技能复核考题答案
- 一个线程交替运行的考题
- Java考题
- Java 考题
- 国内技术创新型公司的一个问题
- 一篇对硬盘讲解很透彻的文章
- 如何填写项目报告
- 关于ASP.NET页面动态添加控件的总结
- Button按钮的一些常用方法
- SP的利润是怎么减少的
- 一个大公司JAVA考题的问题
- linux学习笔记
- 变长数组的灵活运用
- equals 与 tostring
- 我喜欢简单:ant - java 构建工具
- 关注多线程的写法
- Jsp_Config
- ASP.NET2.0新增
- 对IBM ThinkPad 隐藏分区系统的分析