package reuse;
import java.util.Random;
public class FinalData {
private static Random random = new Random(47);
private String id;
public FinalData(String id) {
this.id = id;
}
//只是静态变量,可以给valueOne值进行赋值
private static int valueOne = 1;
//含有final为常量,不能继续给VALUE_TWO赋值,否则编辑器会报错
private static final int VALUE_TWO = 1;
private static final int VALUE_THREE = 3;
private final int i4 = random.nextInt(4);
private static final int INT_5 = random.nextInt(5);
private Value v1 = new Value(11);
private final Value v2 = new Value(11);
private static final Value VALUE_3 = new Value(11);
private final int[] a = {1, 2, 3};
public String toString() {
return id + ":" + "valueOne = " + valueOne + ";VALUE_TWO = " + VALUE_TWO + ";i4 = " + i4 + ";INT_5 = " + INT_5 + ";v1 = " + v1 + ";v2 = " + v1 + ";VALUE_3 = " + VALUE_3;
}
public static void main(String[] args) {
FinalData finalData = new FinalData("finalData1");
finalData.v2.i++;
finalData.v1 = new Value(9);
for (int i = 0; i < finalData.a.length; i++) {
finalData.a[i]++;
}
System.out.println(finalData);
FinalData finalDataExt = new FinalData("finalData2");
System.out.println(finalData);
System.out.println(finalDataExt);
}
}
class Value {
int i;
public Value(int i) {
this.i = i;
}
}
输出结果:
staticstatic final final static final final final static
finalData1:valueOne = 1;VALUE_TWO = 1;i4 = 1;INT_5 = 3;v1 = reuse.Value@14ae5a5;v2 = reuse.Value@14ae5a5;VALUE_3 = reuse.Value@7f31245a
finalData1:valueOne = 1;VALUE_TWO = 1;i4 = 1;INT_5 = 3;v1 = reuse.Value@14ae5a5;v2 = reuse.Value@14ae5a5;VALUE_3 = reuse.Value@7f31245a
finalData2:valueOne = 1;VALUE_TWO = 1;i4 = 2;INT_5 = 3;v1 = reuse.Value@6d6f6e28;v2 = reuse.Value@6d6f6e28;VALUE_3 = reuse.Value@7f31245a
如果再次运行代码的话,输出的结果应该是不一样的,因为这里包含的随机数,但是并不影响比较这两个关键词的使用;为了方便区分在每个变量上面加了使用的关键词
final : final是一个编译时,恒定不变的数据。运用对象我主要分为两大类,基本数据类型和引用类型。通过重新初始化对象可以看出,基本数据类型值不会改变,而引用类型的值初始化时,可以改变的!
static:final在编译时,重新初始化类,值可以改变;但static则不会的,因为所有的static对象只会被初始化一次。另外由final static修饰的通常都是大写字母单词之间用下划线区分。