2020-09-11 Java Final关键字(为下一篇内部类做准备)

四种用法:
1.可以用来修饰一个类

public final class 类名称{
  //方法体...
}

含义:这个类不能有任何子类
注意:一个final类,其中所有成员方法都不能进行覆盖重写(没儿子)
2.可以用来修饰一个方法

修饰符 final 返回值类型 方法名称(参数列表){
  //方法体...
}

注意:当final修饰一个方法,此方法不能进行覆盖重写;所以对于类和方法来说,abstract和final不能同时使用,因为矛盾。
3.可以用来修饰一个局部变量
注意:当final修饰一个局部变量(只保证唯一一次赋值),那么这个局部变量就不能进行更改。
对于基本类型来说,不可变说的是变量中的数据不可改变
对于引用类型来说,不可变说的是变量中的地址值不可改变,但里面的内容可以改变。

final1.png

4.可以用来修饰一个成员变量
注意:当final修饰一个成员变量,那么这个成员变量也不能进行更改。
与局部变量区别:
1、由于成员变量有默认值,所以用了final后必须手动赋值(报提示),不给默认值了;
2、当final修饰一个成员变量,要么直接赋值,要么通过构造方法赋值(二者选其一)。必须保证所有重载的构造方法对其都有赋值。

成员变量和局部变量的区别

1.从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;但是,成员变量和局部变量都能被final所修饰;
2.从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存
3.从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。
4.成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值。

你可能感兴趣的:(2020-09-11 Java Final关键字(为下一篇内部类做准备))