一、final关键字
final关键字代表最终、不可改变的
常见的四种用法:
- 可以用来修饰一个类
- 可以用来修饰一个方法
- 可以用来修饰一个局部变量
- 可以用来修饰一个成员变量
(一)、final关键字用来修饰一个类
格式: public final class 类名称 { // ………… }
含义:当前这个类不能有任何的子类
注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写(因为没儿子)
/* 注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写(因为没儿子) */ public final class DemoFinal /*extends Object*/{ public void method(){ System.out.println("方法执行"); } }
//不能使用一个final类来作为父类 public class MySon /*extends DemoFinal*/{ }
(二)、final关键字可以用来修饰一个方法
- 当final关键字用来修饰一个方法的时候,这个方法就是最终的方法 也就是不能被覆盖和重写
格式: 修饰符 final 返回值类型 方法名称(参数列表){ 方法体; }
注意:对于类、方法来说,abstract关键字和final关键字不能同时使用,因为矛盾
(三)、final还可以用来修饰局部变量
- final还可以用来修饰局部变量,那么这个变量就不能进行更改,一次赋值,终生不变
- 对于基本类型来说 不可变是说的变量当中的数据不可变
- 对于引用类型来说,不可变说的是变量当中的地址值不可改变
public class demo02 { public static void main(String[] args) { int num1=10; System.out.println(num1);//10 num1=20; System.out.println(num1);//20 //一次赋值,终生不变 final int num2=100; System.out.println(num2);//100 // num2=100;错误写法 //正确写法 只要保证有唯一一次赋值即可 final int num3; num3=30; System.out.println(num3);//30 //对于基本类型来说 不可变是说的变量当中的数据不可变 //对于引用类型来说,不可变说的是变量当中的地址值不可改变 Student stu1=new Student("张三"); System.out.println(stu1); System.out.println(stu1.getName());//张三 stu1=new Student("李四");//李四 System.out.println(stu1); System.out.println(stu1.getName()); final Student stu2=new Student("王五"); //错误写法啊,final的引用类型变量 其中的地址不可改变 //stu2=new Student("王嘉尔"); System.out.println(stu2.getName()); stu2.setName("王嘉尔"); System.out.println(stu2.getName()); } }
(四)、final关键字可以用来修饰一个成员变量
- 对于成员变量来说,如果使用final关键字,那么这个变量也照样是不可变的
- 对于成员变量具有默认值,所以使用了final之后必须手动赋值,不会再给默认值了
- 对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值(二者选择其一)
- 必须保证类当中的所有的重载的构造方法都会对final的成员变量进行赋值