package szsm;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
*
* @author 2萌
* final:
* 1、final修饰符可以修饰局部变量、成员变量、方法、类
* 2、用关键词final修饰的域成为最终域。用关键词final修饰的变量一旦赋值,就不能改变,也称为修饰的标识为常量。如果一个类的域被关键字
* final所修饰,它的取值在程序的整个执行过程中将不会改变。
* 3、而对于对象引用,不能改变的是他的引用,而对象本身是可以修改的。一旦一个final引用被初始化指向一个对象,这个引用将不能在指向其他对象。
* java并未提供对任何对象恒定不变的支持。这一限制也通用适用于数组,它也是对象。
*/
public class FinalTest {
final static int a;
final String str;
final List list;
/**
* 注意一:
* 对final修饰的成员变量赋值,在静态代码块或者是类的构造方法里面。
* 注意两种方法赋值时候final定义变量的不同写法,如果是静态代码块对其进行初始化时候必须加static关键字
* 但是对于在构造方法中初始化的时候不需要写static关键字修饰
*/
FinalTest() {
str = "10";
list = new ArrayList();
}
FinalTest(String ii, List l) {
str = ii;
list = l;
}
static {
a = 3;
}
/*
* 注意二:
* final修饰的成员变量不可以在普通方法里面对其赋值。
* 报错提示:The final field FinalTest.a cannot be assigned
*/
// public void A () {
// a = 11;
// }
public static void main(String[] args) {
FinalTest finalTest = new FinalTest();
finalTest.list.add(new FinallyTest());
System.out.println("finalTest.str = " + finalTest.str + " " + finalTest.list.getClass());
// finalTest.A();
System.out.println(finalTest.a);
/**
* finalTest.list = new LinkedList();
* 对象的引用是不可以变化的
* 此语句异常提示:
* The final field FinalTest.list cannot be assigned
*/
// finalTest.list = new LinkedList();
finalTest = new FinalTest("zhangsan",new ArrayList());
finalTest.list.add(new FinallyTest());
System.out.println("finalTest.str = " + finalTest.str + " " + finalTest.list.getClass());
}
}
打印结果:
finalTest.str = 10 class java.util.ArrayList
3
finalTest.str = zhangsan class java.util.ArrayList