(博客就从这里出发吧!)
静态变量是一个很不好搞懂的问题,如下图程序题,今天做的时候晕晕乎乎的,看到网上好多讲解也不太满意。所以自己只好愚笨地写写。
先看看所学对比静态与非静态的区别。
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小白,有错还望您指出。谢谢!