final关键字的理解

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,不可被继承。

 

posted @ 2017-08-15 20:22  迪拜trashman  阅读(123)  评论(0编辑  收藏  举报