概念:最后的,不可更改的。
final可修饰的内容:1.类(最终类) 2.方法(最终方法) 3.变量(最终变量)
final修饰类 :此类不能被继承,没有子类(String Math System均为final修饰的类,不能被继承)。
final修饰方法:此方法不能被覆盖和不能被重写,可继承。
final修饰变量,就是常量,此变量值不能被改变,所有final修饰的变量只能赋值一次,值
final修饰实例属性 ,变为实例常量。实例变量不再提供默认值,必须手动赋值。下面代码给了赋值方式,需要注意的是:在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值
- public class TestOne{
- public static void main(String[] args) {
- new student();
- }
- }
- class student{
- final String name;//错误:未初始化变量name 应该加上 ="Tom"
-
- public student() {
- //name = "Tom";//也可在构造方法中赋值
- }
-
- }
静态常量,不再提供默认值,需要手动赋值,代码中给了赋值的方法,任选其一
- public class TestTwo{
- public static void main(String[] args) {
- System.out.println(Student.SCHOOL_NAME);
- }
- }
- class Student{
- static final String SCHOOL_NAME;//错误:没有初始化变量 应加上="XXX中学"
-
- static {
- //SCHOOL_NAME= "XXX中学"; 也可在静态代码块中赋值
- }
- }
对象常量:注意 引用类型地址不可变,但内部的值可以更改,比如数组里面存储的数据
public class TestThree{
public static void main(String[] args) {
final int num = 100;
num +=20;//错误:final修饰,值不能变
final int[] nums = new int[] {11,22,33};
nums= new int[5];//错误:final修饰引用类型,地址不能变
final Student s = new Student();
s=new Student();//错误:final修饰引用类型,地址不能变
}
}
class Student{
String name;
}