fianl修饰类:该类不能被继承(不能有子类,但是可以有父类)
格式:
final class 类名 { }代码示例:
public final class MyClass extends Object{ public void method() { System.out.println("方法执行!"); } } public class MySubClass extends MyClass{ }报错:该类不能被继承
final修饰方法:这个方法就是最终方法,也就是不能被覆盖重写。
格式:
修饰符 final 返回值类型 方法名(参数列表){ //方法体 }重写被 final 修饰的方法,编译时就会报错。
注意事项:对于类、方法来说,abstract关键字(要覆盖重写)和final关键字(不能被覆盖重写)不能同时使用,因为矛盾。
abstract和final报错:
final修饰变量:表明该变量是一个常量,不能再次赋值
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。
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修饰的常量名称,一般都有书写规范,所有字母都大写。