Java中的final修饰符

(一)final可以修饰变量、方法、类

(二)final修饰的变量

1)被final修饰的变量叫做常量
2)不可变量,即不允许二次修改值。
3)一定要显式地给定初值。
①为什么强调“显式”呢?因为类的实例变量和静态变量在不给初值的情况下,有默认的初始值,例如:int类型的变量的默认初始值为0。但是final修饰的变量必须要显式地给定初值,不然编译出错。
②final变量必须显式给出初值,并且一旦给定,不允许再次修改。

(三)在哪里为final变量赋初值呢?

1)对于实例变量,有3个位置可以赋值。必须要在其中一个位置进行赋值,如果这3个位置都没赋值,编译无法通过。
①声明final变量时直接赋值。示例:final int age=20;(最简单,最常用的方式)
②构造函数中赋值。示例:

public class Demo1 {
    final int age;

    public Demo1(int age1){
        age=age1;//在构造函数中为final变量赋值
    }
}

③在非静态代码块中赋值。示例:

public class Demo1 {
    final int age;
    {
        age=20;//在非静态代码块中为final变量赋值
    }
}

2)对于静态变量,可以在2个位置进行赋值。可想而知,静态变量不可能在构造函数或者非静态代码块中赋值。
①声明final变量时直接赋值。示例:final static int age=20;(最简单,最常用)
②在静态代码块中赋值。示例:

public class Demo1 {
    final static int age;

    static{
        age=20;//在静态代码块中赋值
    }
}

3)对于局部变量,final修饰的局部变量一旦被赋初始值,将不能再次赋值。如下图:
这里写图片描述

(四)final修饰的方法

1)final修饰的方法不能重写,用于限制该方法不能被子类重写
2)如果子类和父类在同一个包下,子类无法重写父类的private方法,但是可以重写父类的public、package、protected的方法。除此之外,子类无法重写父类的final方法
3)如果子类和父类不在同一个包下,子类无法重写父类的private、package方法,但是可以重写父类的public、protected的方法。除此之外,子类无法重写父类的final方法
4)final方法不能被子类重写,abstract方法需要被重写,因此final和abstract不能同时修饰一个方法
5)private和final同时修饰某个方法是没有太大意义,但是被Java语法允许。使用public final修饰方法,子类虽不能重写,但是子类能继承并访问该方法。但是使用private final修饰方法,子类既不能重写,又不能访问,显然毫无意义

(五)final修饰的类

1)final修饰的类不能被继承,限制该类被继承
2)final和abstract不能同时修饰某一个类。道理很简单,final不允许继承,abstract需要被继承,二者显然冲突了。如下图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值