1、final修饰类、变量和方法的区别
- 修饰类:类不能被继承。
- 修饰变量:变量就成了常量,只能被赋值一次。
* 常量命名规范:如果是一个单词,所有字母大写;如果是多个单词,每个单词都大写,中间用下划线隔开。
* final修饰变量叫做常量,一般会与public static共用。
- 修饰方法:方法不能被子类重写。
2、final修饰变量的初始化时机
- 方法一:显示初始化
- 方法二:在对象构造完毕前即可(通过构造函数进行初始化)
- 以上两种方法不能同时都用,会报错。因为被final修饰的变量只能被赋值一次。
1 class Demo { 2 //final int num=10; //这是第一种初始化的方法,显示初始化 3 final int num; 4 5 public Demo(){ 6 num=10; //这是第二种初始化的方法,通过构造函数完成初始化 7 } 8 }
3、final修饰基本类型和引用类型的区别
- final修饰基本类型:是值不能被改变。
* 注意在方法声明上使用final修饰参数时,参数中被final修饰的变量可以在方法调用时重新赋值。
* 其实这是因为,上一次调用的方法执行完就被弹栈了,所以每次调用方法传入参数的时候,都相当于是一个“新”的方法入栈。因此能够不报错,而且还能改变变量的值。
1 public void method(final int x){ 2 System.out.println(x); 3 } 4 5 method(10); //合法 6 method(20); //合法
- final修饰引用类型:是地址值不能被改变,对象中的属性可以改变。
1 class Person { 2 ... 3 } 4 5 final Person p=new Person("张三",23); 6 //p=new Person("李四",24); //这么写报错,因为被final修饰的对象所指向的地址值不能改变 7 p.setName("李四"); //可以改变对象中的属性值 8 p.setAge(24); //可以改变对象中的属性值