1.
当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变 。
2.
其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中 。这两个 地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。
3.
引用对象 can never be changed to point to another object.
However, 引用对象 can be modified;
1.public class Bat {
2. final double PI = 3.14; // 在定义时便给址值
3. final int i; //称为"Blank final",因为要在构造函数中进行初始化,所以此处便不可再给值
4. final List list; // 此变量也与上面的一样
5.
6. Bat() {
7. //PI=3.14; 不能同时既在定义时给了值,又在构造函数中给另外的值
8. i = 100;
9. list = new LinkedList();
10. }
11.
12. Bat(int ii, List l) {
13. i = ii;
14. list = l;
15. }
16.
17. public static void main(String[] args) {
18. // 1. 默认的构造函数
19. Bat b = new Bat();
20. System.out.println(b.i + "->" + b.list.getClass());
21.
22. // 不论是i的 值或是list的类型,一旦初始化,无法再更改
23. // b.i=25;
24. // b.list=new ArrayList();
25.
26. // 2.带参数的构造函数
27. Bat b2 = new Bat(10, new ArrayList());
28. System.out.println(b2.i + "->" + b2.list.getClass());
29. // 可以通过重新初始化来指定i的值或list的类型
30.
31.
32. //引用对象 can never be changed to point to another object.
33. //However, the object can be modified;
34. b2.list.add("aaa");
35. }
36.}