1.final知道初值:
不一定是编译的时候就知道初值(private static final int a = 1),也有可能是运行时才知道初值(比如说:private static final int a = random.nextInt(2));
2.final与static final的区别:
无论生成多少对象,值都是一个确定的值。如果不加上staitic,则生成一个对象是会生成一个不同的值,这种区别仅仅是final初始化在运行中的时候才会有这种区别。
1 package practice; 2 3 import java.util.Random; 4 5 public class FinalTest { 6 private Value value = new Value(11); 7 private static Random random = new Random(47); 8 private final int a = random.nextInt(40); 9 private static final int b = random.nextInt(40); 10 private final Value value1 = new Value(22); 11 private final Value value2 = new Value(33); 12 public void prints(){ 13 System.out.println(a+" "+b); 14 } 15 16 public static void main(String[] args) { 17 FinalTest finalTest = new FinalTest(); 18 // System.out.println(finalTest.prints()); 19 finalTest.prints(); 20 FinalTest finalTest1 = new FinalTest(); 21 // System.out.println(finalTest.prints()); 22 finalTest1.prints(); 23 } 24 25 } 26 27 class Value{ 28 private final int i; 29 public Value(final int i){ 30 this.i = i; 31 } 32 public void print(){ 33 System.out.println(i); 34 } 35 }
3.final初始化:
a.定义的时候进行初始化。b.在构造器中进行初始化。(这时若还不初始化,会直接报错);
4.final也可以作为一个方法的参数public Value(final int i),则这个参数是不可以进行修改的(如果是引用则代表这个引用是不可以进行重新赋值的)。
5.private方法都隐式指定为final(不存在覆写的问题,因为看不到,子类如果写的方法和这个一样,则是一个子类所特有的新的方法)。
6.final类中所有的方法都隐式加上了final,不可被继承。