final关键字
1.1 概述
final关键字代表最终、不可改变的内容。
- final:不可改变。用于修饰类、方法和变量
- 类:被修饰的类,不能被继承。
- 方法:被修饰的方法,不能被重写。
- 变量:被修饰的变量,不能被重新赋值
1.2 使用方法
1.修饰类
含义:当前这个类不能有任何的子类。(太监类)
格式:
public final class 类名称{
// ......
}
注意:一个类如果是final的,那么其中的所有成员方法都无法进行覆盖重写(因为没有子类)
2.修饰成员方法
当final关键字用来修饰一个方法的时候,这个方法就是最终方法,不能被覆盖重写
格式:
修饰符 final 返回值类型 方法名称(参数列表){
// 方法体
}
注意事项:
对于类,方法来说,abstract和final关键字不能同时用,因为矛盾
public void Fu{
public final void method(){
System.out.println("父类方法执行~");
}
}
public void Zi extends Fu{
// 会发生报错
@Override
public void method(){
System.out.println("重写父类方法~")
}
}
3.修饰局部变量
对于基本数据类型来说:
不可变说的是变量中的【数据】不可变
一次赋值,终身不变
public static void main(String[] args){
final int num = 10;
System.out.println(num);// 10
// num = 20; 报错
}
对于引用类型来说是【地址值】不可变
// 定一个学生类
public class Student{
private String name;
public Student(){
}
public Student(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
public class Final{
public static void main(String[] args){
final Stundet stu = new Student("雷神");
System.out.println(stu); // 雷神
//错误写法,final的引用类型变量的地址值不可改变
// stu = new Student("蛇女");
// 但是方法可以调用
stu.setName("金刚狼");
System.out.println(stu);// 金刚狼
}
}
4.修饰成员变量
使用final关键字修饰后,那么这个变量是不可能改变的。
成员变量初始化的方法有两种,只能二选一:
-
显示初始化:
public class User{ final String USERNAME = "张三"; private int age; }
-
构造方法初始化
public class User{ final String USERNAME; private int age; public User(String username,int age){ this.USERNAME = username; this.age = age; } }
注意:
被final修饰的常量名称,一般都有书写规范,所有字母都大写。
举例:
public class Person{ private final String name/* = 雷神*/; public Person(){ name = "蜘蛛侠"; } public Person(String name){ this.name = name; } public String getName(){ return name; } // public void setName(String name){ // this.name = name; //} }