java中final详解

final是Java中的终结器,final修饰类这个类则不能被继承,final修饰方法这个方法则不能被覆写……

1.final修饰类

final修饰类则表示这个类是不能够extends继承。可以理解为这个类不能拥有子类,一旦这个类被final修饰则这个类中的所有方法都会默认被final修饰称为终结方法不能被覆写,而成员变量–属性则不会加上final关键字修饰。
通常JDK中的包装类以及工具类String,Integer类等都会被final修饰。

class A{
    int a=0;
    final class B{
            void func(){
                        System.out.println("A:func");
                        }    
            }
}
class C extends A{
    void func()    {
            new B().func();
                }
}
public class Test{
    public static void main(String[] args){
            C c =new C();
                    c.func();
                        }
}

这个代码是没有问题的。虽然内部类被定义为final只是说明这个内部类不能通过extends继承子类,外部类继承后的子类是可以访问到父类的内部类的哦。

2.final修饰方法

当一个方法被final修饰,明确表示该方法不允许被覆写。当一个方法被定义为了private,相当于加上了一个final。

3.final修饰属性

被final修饰的成员变量必须在声明时初始化,并且初始化后值无法被修改。可以通过定义时直接赋值,可以通过构造函数初始化,可以通过构造块完成初始化。
在这里插入图片描述

因为final修饰的值和类型都不可以被改变,相当于常量。也就是说,final修饰的变量,不会发生类型提升。

final byte b1 =2;
final byte b2 =3;
byte b3=0;
byte b4 =4;
byte b5 =b1+b2;//不出错,因为b1+b2 被final修饰,没有方法类型提升。
 byte b6 = b3 +b4;//出错,b3+b4有类型提升,int转byte 大转小需要强转。

在这里插入图片描述
建议写完全局变量public final static int B =1;并且在类加载时初始化。及可以通过静态块初始化。这样的话,类名调用,效率较高。
命名规范规定:全局常量多个单词全部大写。单词间“_”分隔。

final修饰引用数据类型变量

final修饰的变量值不能改变,而引用数据类型变量存储的是地址,所以地址的值不能改变,也就是不能改变指向。

        final String str ="hello";
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值