1.final关键字的概念
final关键字代表最终、不可改变的。
常见四种用法:
- 可以用来修饰一个类
- 可以用来修饰一个方法
- 还可以用来修饰一个局部变量
- 还可以用来修饰一个成员变量
2.final关键字用来修饰类
当final关键字用来修饰一个类的时候,格式:
public final class 类名称{
}
含义:当前这个类不能有任何的子类。(太监类 )
注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写。|
4.还可以用来修饰一个成员变量
package cn.itcast.day10.demo04;
public final class Final01 {
public void methodFinal(){
System.out.println("方法执行啦");
}
}
3.final关键字用于修饰成员方法
当final关键字用来修饰一个方法的时候, 这个方法就是最终方法,也就是不能被覆盖重写。
格式:
修饰符final 返回值类型方法名称(参数列表) {
方法体
}
注意事项:
对于类,方法来说,abstract关键字和final关键字不能同时使用,因为矛盾。
4.final用来修饰局部变量
一旦使用final用来修饰局部变量,那么这个变量就不能进行更改。
- 对于基本类型来说,不可变说的是变量当中的数据不可改变
- 对于引用类型来说,不可变说的是变量当中的地址值不可改变
学生类
package cn.itcast.day10.demo04;
public class Student {
private String name;
public Student() {
}
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
主函数
package cn.itcast.day10.demo04;
public class Final02 {
public static void main(String[] args) {
final int num = 20;
System.out.println(num);
//num = 202; //不能再进行赋值,一次赋值,终生不变
//对于基本类型来说,不可变说的是变量当中的数据不可改变
//对于引用类型来说,不可变说的是变量当中的地址值不可改变
Student stu1 = new Student();
stu1.setName("赵丽颖");
System.out.println(stu1);
System.out.println(stu1.getName());
Student stu2 = new Student("霍建华");
System.out.println(stu2);
System.out.println(stu2.getName());
System.out.println("===============================================");
final Student stu3 = new Student("高圆圆");
//错误写法! final的引用类型变量,其中的地址不可改变
// stu3 = new Student("刘雨欣");
System.out.println(stu3.getName()); //高圆圆
System.out.println(stu3);
stu3.setName("周冬雨");
System.out.println(stu3.getName());
System.out.println(stu3);
}
}
执行结果
20
cn.itcast.day10.demo04.Student@b4c966a
赵丽颖
cn.itcast.day10.demo04.Student@2f4d3709
霍建华
===============================================
高圆圆
cn.itcast.day10.demo04.Student@4e50df2e
周冬雨
cn.itcast.day10.demo04.Student@4e50df2e
5.final用于修饰成员变量
对于成员变量来说,如果使用final关键字修饰,那么这个变量也照样是不可变。
- 由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值了。
- 对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值。二者选其一。
- 必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值。
package cn.itcast.day10.demo04;
public class Person {
//private final String name = "鹿晗";
//或者
private final String name;
public Person() {
name = "关晓彤";
}
public Person(String name) {
this.name = name;
}
}