final
-
final修饰变量(局部变量,方法参数,实例变量)
- 可以初始化一次,以后不能再改变
public class Demo01 { public static void main(String[] args) { /* * final 修饰的变量 * 1. final 修饰的变量,可以初始化一次,不能再修改 */ //在方法中声明的变量是局部变量 final int a; a = 8;//初始化赋值 System.out.println(a);//8 //a = 9;//赋值,final 修饰的变量不能再次赋值 final int b = 9; //b = 10; //final修饰的变量arr只能初始化一次不能再修改 //arr 是引用变量,值是数组对象的首地址 //是指arr的值,也就是地址值初始化以后不能修改了 //也就是 arr与数组之间的引用关系不能改变了! //但是数组的内容是可以改变的 final int[] arr = {5,6}; arr[0] = 9; System.out.println(Arrays.toString(arr));//9,6 //arr = new int[8]; //方法参数是在参数传递时候初始化的! //如果方法参数是 final 的,则接收参数值以后 //不能再修改了。好处是可以保护方法参数,避免被修改 test(5,6); Eoo eoo = new Eoo(8); System.out.println(eoo.a); System.out.println(eoo.b); //eoo.a = 9;//不能修改final变量 } public static void test(int a, final int b) { a = 9; //b = 0; System.out.println(a+","+b); } }
class Eoo { //final 属性 //1. 初始化以后不能再修改 //2. final 属性必须赋值或者在构造器中初始化,否则编译错误 final int a = 5; final int b; public Eoo(int b) { this.b = b; } }
- 可以初始化一次,以后不能再改变
-
final可以修饰方法,表示这个方法不能在子类中重写(不能被子类修改)
- 经常为了保护父类中声明的方法,避免被子类意外修改。
public class Foo{ public final void test(){ System.out.println("test()"); } }
- 经常为了保护父类中声明的方法,避免被子类意外修改。
-
final可以修饰类,表示这个类不能再继承了。不能再有子类了。
- 一般用于限制子类,避免类再次被扩展(修改)。String就是final类,String是极其重要的Java API,为了避免String功能被串改,所以定义为final的类型。 java.lang 包中的很多类都是final的类。
public final class Foo{ public void test(){ System.out.println("test()"); } }
- 一般用于限制子类,避免类再次被扩展(修改)。String就是final类,String是极其重要的Java API,为了避免String功能被串改,所以定义为final的类型。 java.lang 包中的很多类都是final的类。
-
static final 定义常量
- static 一份,final 表示不能再改
- 一份且不能再改变的数据,就是Java中的常量。
- 软件中一份且不能改变的数据,应该都定义为常量