1.final可以修饰类,该类不能被继承。
2.final可以修饰方法,该方法不能被重写。(覆盖,复写)3.final可以修饰变量,该变量不能被重新赋值。因为这个变量其实常量。
//常量:
A:字面值常量 "hello",10,true
B:自定义常量 final int x =10;
final修饰局部变量的问题
基本类型:基本类型的值不能发生改变。
引用类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的。
子类不能重写父类成员变量问题
class Fu{
public int num =10;
public final int num2 =20;}
class Zi extends Fu{
public void show(){
num =100;
System.out.println(num);//无法为最终变量num2分配值//num2 = 200;
System.out.println(num2);}}
class FinalDemo{
public static void main(String[] args){
Zi z =newZi();
z.show();}}
final修饰类
final修饰成员变量 局部变量是基本数据类型
局部变量是引用数据类型 引用数据类型被final修改,依旧可以重新赋值,但是不能重新分配内存。
final修饰成员方法
变量初始化时机问题
/*
final修饰变量的初始化时机
A:被final修饰的变量只能赋值一次。
B:在构造方法完毕前。(非静态的常量)
*/
class Demo{//int num = 10;//final int num2 = 20;
int num;
final int num2;{//num2 = 10;}
public Demo(){
num =100;//无法为最终变量num2分配值
num2 =200;}}
class FinalTest2{
public static void main(String[] args){
Demo d =newDemo();
System.out.println(d.num);
System.out.println(d.num2);}}