您的位置:首页 > 职场人生

一道jAvA静态的面试题想到的

2016-03-18 20:20 405 查看
(博客就从这里出发吧!)
静态变量是一个很不好搞懂的问题,如下图程序题,今天做的时候晕晕乎乎的,看到网上好多讲解也不太满意。所以自己只好愚笨地写写。
先看看所学对比静态与非静态的区别。
static,非private修饰      **Pk**      非static,非private修饰
属性:类属性,类变量                        实例属性。实例变量
方法:类方法                               实例方法
调用方式:类名. 或通过对象.                  对象.
归属:类                                  单个对象


package cn.staticdemo;

public class Test{
private static Test tester = new Test(); //step 1
private static int count1;               //step 2
private static int count2 = 2;           //step 3
public Test(){                           //step 4
count1++;
count2++;
System.out.println("" + count1 + count2);
}
public static Test getTester(){          //step 5
return tester;
}

public static void main(String[] args){
Test.getTester();
System.out.println( "Test.count1=" +Test.count1+"   "+ "Test.count2="+Test.count2);
}
}
结果:11
Test.count1=1   Test.count2=2

注意 Test()构造方法中是  +count1+count2 是拼接
注意 Test.getTester(); 观察程序执行顺序 先到了静态方法//step 1  那里。再执行//step 4  接着就是按顺序执行2,3,5。
不难发现 14235为执行顺序
**修改代码**


public static void main(String[] args){

System.out.println( “Test.count1=” +Test.count1+” “+ “Test.count2=”+Test.count2);

Test.getTester();

System.out.println( “Test.count1=” +Test.count1+” “+ “Test.count2=”+Test.count2);

}

只要记住Test.getTester();先执行,那么答案就很直观
答案:11
Test.count1=1   Test.count2=2
Test.count1=1   Test.count2=2

**再次修改代码**


Test t=new Test();

System.out.println( “Test.count1=” +Test.count1+” “+ “Test.count2=”+Test.count2);

答案为:
11
23
Test.count1=2   Test.count2=3
这时就是正常的逻辑。先执行静态变量,再到构造方法。
**明白上述道理候,再次修改代码**


Test.getTester();

Test t=new Test();

System.out.println( “Test.count1=” +Test.count1+” “+ “Test.count2=”+Test.count2);

“`

答案和上面的也一样。

Java小白,有错还望您指出。谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: