一、final数据
(1)、编译期常数,它永远不会改变;
(2)、无论static还是final字段,都只能存储一个数据,而且不可以改变,对于基本类型来说,final会将值变成一个常数,但对于对象来说,final会将对象变成一个常数,对象不可改变,但对象本身是可以改变的,例如:
class Value{
int i = 1;
}
public class Property {
final int i1 = 9;
static final int i2 = 99;
public static final int i3 = 39; //public表示可在包外使用,static强调只有一个,final表明是一个常数
final int i4 = (int)(Math.random()*20);
static final int i5 = (int)(Math.random()*20);
Value v1 = new Value();
final Value v2 = new Value();
static Value v3 = new Value();
final int[] a = {1,2,3,4,5,6};
public void print(String id){
System.out.println(id + ":" + "i4 = " + i4 + " , i5 = " + i5);
}
public static void main(String[] args) {
Property fd1 = new Property();
// fd1.i1 ++;
fd1.v2.i ++;
fd1.v1 = new Value();
for(int i=0; i<fd1.a.length; i++){
fd1.a[i] ++;
}
// fd1.v2 = new Value();
// fd1.v3 = new Value();
// fd1.a = new int[3];
fd1.print("fd1");
System.out.println("Creating new Property");
Property fd2 = new Property();
fd1.print("fd1");
fd2.print("fd2");
}
}
结果:
fd1:i4 = 2 , i5 = 3
Creating new Property
fd1:i4 = 2 , i5 = 3
fd2:i4 = 7 , i5 = 3
(i4是static的,只被初始化一次,所以两次值一样)
二:final方法,final关键字定义的方法不可以被重载;
三:final类:final关键字定义的类不可以被继承(相当于类中的方法都是final类型的);