1.修饰类
fianl修饰类:该类不能被继承(不能有子类,但是可以有父类)
格式:
final class 类名 {
}
代码示例:
public final class MyClass extends Object{
public void method() {
System.out.println("方法执行!");
}
}
public class MySubClass extends MyClass{
}
报错:该类不能被继承
2.修饰方法
final修饰方法:这个方法就是最终方法,也就是不能被覆盖重写。
格式:
修饰符 final 返回值类型 方法名(参数列表){
//方法体
}
重写被 final 修饰的方法,编译时就会报错
。
注意事项:对于类、方法来说,abstract关键字(要覆盖重写
)和final关键字(不能被覆盖重写
)不能同时使用,因为矛盾。
abstract和final报错:
3.修饰变量
final修饰变量:表明该变量是一个常量,不能再次赋值
1. 局部变量——基本类型
final 修饰指的是基本类型的数据值不能发生改变
思考,以下两种写法,为何写法1报错!写法2可通过编译?
写法1:
final int c = 0;
for (int i = 0; i < 10; i++) {
c = i;
System.out.println(c);
写法2:
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
final int c = i;
System.out.println(c);
}
}
根据 final 的定义,写法1报错!写法2,可通过编译,因为每次循环,都是一次新的变量c。
2. 局部变量——引用类型
final 修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的。
3. 成员变量
成员变量涉及到初始化的问题,初始化方式有两种,只能二选一:
显示初始化;
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修饰的常量名称,一般都有书写规范,所有字母都大写。