当前位置: 首页 > news >正文

java~final关键字

final关键字

  • final基本介绍
  • final的使用细节

final基本介绍

  • final是最终的意思,可以修饰类,属性,方法,局部变量
  • 什么时候会要使用到final呢?
    1.想要类不被继承时
    2.不希望类的某个属性的值被改变时
    3.不想父类的某个方法被子类重写时
    4.不想某个局部变量被修改时

代码演示:

public class Final01 {public static void main(String[] args) {E e = new E();//e.TAX_RATE = 0.9;TAX_RATE 被final修饰,值不能改变}
}
final class A{//1.不希望被继承的时候用final修饰,这样B就不能继承A了}
//class B extends A{ }A被final修饰,不能被继承class C{public final void tao(){//3.不想被子类重写此方法,用final修饰此方法//加了final的NUM也可以被叫做局部常量,不能修改final double NUM = 0.9;//4.如果不想局部变量被修改,用final修饰//NUM = 1.00;NUM被final修饰,值不能被改变}
}
class D extends C {
//    @Override
//    public void tao() {//重写C的方法
//        super.tao();
//    }
//    tao()被final修饰,不能被子类重写
}class E{public final double TAX_RATE = 0.8;//2.不希望类的某个属性被修改,用final修饰
}

final的使用细节

  • final修饰的属性也可以叫常量,一般用XX_XX来命名
  • final修饰的属性在被定义时必须要初始化并且不能修改,初始化可以写在三个位置:
    1.定义属性时
    2.在构造器中初始化
    3.在代码块中初始化
  • 如果final修饰的属性是静态的,那么只有两个位置可以初始化
    1.定义属性时
    2.在代码块中初始化

    不能在构造器中初始化,因为静态属性在类加载的时候就要被初始化,而构造器在实例化对象时才会被调用)
  • final类不能被继承,但是可以实例化对象
  • 一个非final类含有final修饰的方法,这个方法虽然不能被子类重写,但是可以被子类继承并使用

代码演示:

public class FinalDetail01 {public static void main(String[] args) {CC cc = new CC();//Final类虽然不能被继承,但是可以实例化对象new EE().show();//父类没有被Final修饰,但是父类方法被Final修饰,// 虽然该方法不能被子类重写,但是可以被子类继承System.out.println(GG.n1);}
}
//final属性在定义时就必须赋值,并且之后不能在修改
//1.可以在定义属性时赋值
//2.可以在构造器中赋值
//3.可以在代码块中赋值
class AA{public final double TAX = 0.05;//定义属性时赋值public final double TAX2;public final double TAX3;public AA() {TAX2 = 0.09;}//构造器中赋值{TAX3 = 0.4;}//代码块中赋值
}//如果Final修饰的属性是静态的,那么初始化的位置只能有:
//1.定义时赋值
//2.静态代码块中
class BB{public static final double TAX4 = 0.6;public static final double TAX5;public BB() {//TAX5 = 0.7;赋值失败//因为是在加载静态属性,并不是在加载实例属性,所以不能在构造器中赋值//静态属性在类加载的时候就要被初始化,而构造器在实例化对象时才会被调用}static{TAX5 = 0.8;}//静态代码块中赋值成功
}final class CC{ }class DD{public final void show() {System.out.println("show()");}
}
class EE extends DD{ }final class FF{public final void hi(){}//其实这个类已经是Final类了,这个方法就没有必要被修饰成Final方法了//因为这个方法不能被继承,所以不能被重写
}class GG{String s1 = "hello";//String是Final类,不能被继承public static final int n1 = 10;//当static和Final搭配使用时,调用这个属性,不会导致类被加载,所以下面静态代码块中的语句不会被执行static{System.out.println("静态代码块被调用...");}}
http://www.dtcms.com/a/314054.html

相关文章:

  • doris `unicode` 是多语言混合类型分词与elasticsearch分词差异
  • Java从入门到精通 - 算法、正则、异常
  • MQTT:安装部署
  • 【AI 加持下的 Python 编程实战 2_13】第九章:繁琐任务的自动化(中)——自动批量合并 PDF 文档
  • CMake进阶: 使用FetchContent方法基于gTest的C++单元测试
  • Docker-07.Docker基础-数据卷挂载
  • 在CAPL自动化脚本中巧用panel函数
  • 关键领域软件研发如何构建智能知识管理体系?从文档自动化到安全协同的全面升级
  • 实现Trie(前缀和)C++
  • 【REACT18.x】封装react-rouer实现多级路由嵌套,封装登录态权限拦截
  • PyTorch :三角函数与特殊运算
  • python:讲懂决策树,为理解随机森林算法做准备,以示例带学习,通俗易懂,容易理解和掌握
  • 张 事实关注增强模型:提升AI准确率新方法
  • 设备电机状态监测中的故障诊断与定位策略
  • 【AI论文】VL-Cogito:面向高级多模态推理的渐进式课程强化学习
  • Redis之Hash和List类型常用命令
  • [特殊字符] Ubuntu 下 MySQL 离线部署教学(含手动步骤与一键脚本)
  • 小鹏汽车前端面经
  • 笔记本电脑联想T14重启后无法识别外置红米屏幕
  • 【银河麒麟服务器系统】自定义ISO镜像更新内核版本
  • Axure日期日历高保真动态交互原型
  • Axure设计Web端新增表单页面模板案例
  • 蚂蚁S9矿板引脚定义
  • 基于Java的AI/机器学习库(Smile、Weka、DeepLearning4J)的实用
  • 3Ds Max 2019 安装配置教程(精简版适配 | 含中文设置与常见问题)
  • HIL技术:轻松开展整车热管理控制器功能验证
  • PSOFT Pencil+ 4.25 插件安装教程(适用于 3ds Max 2022-2025)
  • CVPR论文解析:告别Janus问题,text-to-3D更一致!
  • ⭐CVPR2025 AKiRa:让视频生成玩转相机光学的黑科技[特殊字符]
  • 9.感知机、神经网络