final关键字

final意思是最终的,不可变的。

一 final修饰的类

不能被继承

package cn.dongli.finalDemo;
final class A {
}
//编译不通过,因为A被final修饰了,B不能再继承A
class B extends A{
}

二 final修饰的方法

不能被重写

package cn.dongli.finalDemo;
class A {
    public final void print(){
        System.out.println("打印A......");
    }
}
//编译不通过,因为A被final修饰了,B不能再继承A
class B extends A{
    //编译不通过,因为类A中的方法print已经被final修饰了,类B继承类A后,不能重写print方法
    public void print(){
        System.out.println("打印B......");
    }
}

三 final修饰局部变量之基本数据类型

值不能修改

package cn.dongli.finalDemo;
public class FinalTest01{
    public static void main(String[] args) {
        final int i=1;
        int i=2;//编译不通过,因为i被final修饰了,只能赋一次值
    }
}

四 final修饰局部变量之引用数据类型

一旦指向某一个对象,不能再指向其他的对象,但是该引用指向的对象的内部数据是可以改变的。

package cn.dongli.finalDemo;
import java.util.ArrayList;
public class FinalTest02 {
    public static void main(String[] args) {
        final ArrayList<Integer> myList=new ArrayList<>();
        //myList=new ArrayList<>();//编译不通过,因为myList已经指向了一个对象,且它被final修饰了,不能再指向其他对象
        myList.add(1);//可以修改myList指向的对象的内部数据
        System.out.println(myList.toString());//输出[1]
    }
}

五 final修饰实例变量

该实例变量只能赋值一次。

我们知道,对于普通的实例变量来说,如果我们不手动赋值的话,系统会赋默认值。

但是实例变量被final修饰后,该变量就只能被赋值一次了,如果系统给该变量赋了默认值,这个值对我们来说就没什么实用价值,因为我们后期也改不了了。所以,sun规定,被final修饰的实例变量,程序员必须手动赋值。

package cn.dongli.finalDemo;
public class FinalTest03 {
    //编译不通过,sun规定,被final修饰的实例变量必须手动赋值
    final int age;
}

再讲手动赋值之前,我们先思考一个问题,实例变量什么时候赋值的呢?答案是在执行构造方法时赋值的,不管是我们手动赋值还是系统赋默认值,真正给该变量赋值的时机都是在执行构造方法时。

被final修饰的实例变量的手动赋值方式:

1. 在变量后面赋值

package cn.dongli.finalDemo;
public class FinalTest04 {
    //直接在变量后面赋值
    final int age=18;
    public static void main(String[] args) {
    }
}

2. 在构造方法中赋值

package cn.dongli.finalDemo;
public class FinalTest05 {
    final int age;
    //在构造方法中赋值
    public FinalTest04(int age) {
        this.age = age;
    }
    public static void main(String[] args) {
    }
}

注意:一般情况下,如果一个实例变量被final修饰了,那么我们会把这个变量声明为静态变量。

六 final修饰静态变量

static+final修饰的变量称为常量。

常量名大写,每个单词之间用"_"连接。

静态变量和常量都存放在方法区中,并且都是在类加载时初始化。

package cn.dongli.finalDemo;
public class FinalTest06 {
    static final double PI=3.1415;
    //在构造方法中赋值
    public static void main(String[] args) {
        System.out.println(PI);
    }
}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值