package com.aaa;
import java.util.ArrayList;
import java.util.List;
class Apple {
private static long a;
private static long b = a++;
public long geta(){ return b;}
}
class Orange {}
public class Test0128 {
public static void main(String[] args) {
List apples = new ArrayList();
for(int i=0;i<3;i++){
apples.add(new Apple());
}
for(int i=0;i<apples.size();i++){
Apple apple = (Apple) apples.get(i);
System.out.println(apple.geta());
}
}
}
static在代码编译的时候初始化变量,final可以在代码运行中初始化变量。
a++是先赋值给b,再自生加1
1.static作用域针对所有对象,类属性,加载类的时候,只初始化了一次,用一个空间,一个对象里面变了他的值,另外一个访问的也是他
2.final针对当前对象,每new一个,就会初始化这个对象b一个独立的空间
所以第一次都为static的时候,类加载的时候只初始化了一次,就是按顺序,a=0;b=a++=0; a=1;a没有给初始值,初始值为0
你b改成final后每new一次,就会初始化一个对象,每个对象里面独立的b
第一次new,a=0;b=a++=0;a=1;
第二次new, a=1;b=a++=1;a=2;
第二次new, a=2;b=a++=2;a=3;