1.1 final关键字的作用
1、用于修饰类,final修饰的类的不能被继承
2、用于修饰方法,final修饰的方法不能被重写
3、f用于修饰变量,final修饰的变量不能二次赋值
1.2 final关键字的使用
修饰类
API中有很多final修饰的类如String 、 Math 、 Scanner等,目的就是供我们使用,而不让我们所以改变其内容。
注意:final关键字不能与abstract连用,,final修饰的方法和类都是不能被改变,abstract修饰的方法和类需要被重写,两者冲突
修饰方法
格式:
父修饰符 final 返回值类型 方法名(参数列表){
//方法体
}
重写被 final 修饰的方法,编译时会报错
修饰变量
1、局部变量(基本数据类型)
基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改
public static void main(String[] args) {
// 声明变量,使用final修饰
final int a;
// 第一次赋值
a = 10;
// 第二次赋值
a = 20; // 报错,不可重新赋值
// 声明变量,直接赋值,使用final修饰
final int b = 10;
// 第二次赋值
b = 20; // 报错,不可重新赋值
}
2、局部变量(引用数据类型)
引用类型的局部变量,被final修饰后,地址不能再更改,不能指向其他对象。但是它指向的对象的内容是可变的。
public static void main(String[] args) {
// 创建 User 对象
final User u = new User();
// 创建 另一个 User对象
u = new User(); // 报错,指向了新的对象,地址值改变。
// 调用setName方法
u.setName("张三"); // 可以修改
}
3、成员变量(引用数据类型)
由于成员变量都有默认值,所以在使用final关键字修饰成员变量时要赋值,否则使用成员变量的默认值且不能更改是没有意义的。成员变量的初始化方式有两种,要么直接赋值,要么是用构造方法赋值,不能有set方法。
/**
* 1、直接赋值
*/
public class User {
final String USERNAME = "张三";
}
/**
* 2、构造方法赋值
*/
public class User {
final String USERNAME;
public User(String username) {
this.USERNAME = username;
}
}