[Java]final关键词

final关键字与类

  • final修饰的类为最终类,意味着该类无法被继承
  • 由于该类无法被继承,故其方法不会被重写,也不会出现多态
  • 因此静态绑定效率较高

例如:

final class Person{
    
}

// class Student extends Person{  //因为Person类被final修饰,无法被继承,故错误
//     
// }

final关键字与方法

  • final修饰的方法无法被重写
  • 该方法不会出现多态
  • 因此该方法加载至该类的静态绑定区

例如:

class Person{
    
    public final void say(){
        System.out.println("我是人类");
    }
}

class Student extends Person{
    
    // public void say(){
    //     System.out.println("我不是人类");  //由于父类的say方法被final修饰,无法被重写,故错误
    // }
}

final关键字与数据类型

  • 基本数据类型被final修饰后其值无法再更改
  • 引用数据类型被final修饰后,锁定的值为该对象在堆中的地址
  • 因此该对象的属性可以更改
  • 但是不可以为变量更改对象,因为这意味着更换它所指向的地址

例如:

class Hello{
    
    final int num = 100;
    final Person person = new Person();
    
    num = 200;  //num由final修饰,其值为100且无法再更改,错误
    
    person.age = 18;  //这里更改的是person所指向的age的值,并没有更改person的值(地址),正确
}

class Person{
    public int age;
}

final关键字与成员变量和局部变量

  • 不管是成员变量或是局部变量都只能对其赋值一次
  • 成员变量可以在代码块中赋值
  • 成员变量还可以在构造器中对其赋值,但必须保证每个构造器都要有赋值语句
  • 局部变量可以在定义时就对其赋值
  • 局部变量还可以在声明后的任一语句对其赋值

例如:

class Hello{
    
    public int num0;
    public final int num1;
    public final int num2;
    
    {
        num1 = 100;  //在代码块中赋值
    }
    
    public Hello(){
        this.num2 = 200;
    }
    
    public Hello(int num0){
        this.num0 = num0;
        this.num2 = 200;
    }
    //可以在构造器中赋值 但必须每个构造器都有赋值语句
    
    public void func(){
        
        final int a = 100;  //可以在声明时就对其赋值
        final int b;
        b = 200;
        //也可以在声明后的语句对其赋值(可以不是声明后的第一句)
        //但无论是哪一种方法都只能赋值一次,否则错误
    }
}

final关键字与参数

方法中的参数同样可以用final来修饰,并且不用考虑其初始化的问题,因为在调用该方法时肯定会传参进去,但需要注意的是在方法体内不能再对该参数的值进行修改

例如:

class Hello{
    
    public static void main(String[] args){
        
        
    }
    
    public static void func(final int num){
        // num = 100;  //因为final修饰的变量只能赋值一次且调用时已经赋值了,故错误
        System.out.println(num);
    }
}

final关键字与静态常量

  • 在类中用static修饰的常量同样可以用final修饰
  • 一般在声明时就为其赋值
  • 其变量名需要全部大写,不同单词间用下划线隔开

例如:

class Hello{
    
    public static final int LAST_NUMBER = 100; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值