码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【JAVA学习笔记】39 - final关键字


    项目代码

    https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/final_

    目录

    项目代码

    一、final关键字基本介绍

     二、final关键字使用注意事项和细节讨论

    1.final修饰的居性又叫常量,一般用XX_XX_XX_X来命名

    2.final修饰的属性在定义时必须赋初值并且以后不能再修改,赋值可以在如下位置之一

    3.如果final修饰的属性是静态的,则初始化的位置只能是

    4.final类不能继承,但是可以实例化对象。

    5.如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承。

    5.一般来说,如果类已经是final类了,就不需要再将方法修饰成final

    6.final不能修饰构造器方法(构造器)

    7.final和static往往搭配使用,效率更高,不会导致类加载底层编译器做了优化处理。

    8.包装类(Integer, Double,Float, Boolean等都是fina),String也是final类.

    三、final关键字的练习

    1.

    2.


    一、final关键字基本介绍

    final可以修饰类、属性、方法和局部变量,
    在某些情况下,程序员可能有以下需求,就会使用到final
    1)当不希望类被继承时,可以用final修饰


    2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰


    3)当不希望类的的某个属性的值被修改,可以用final修饰.


    4)当不希望某个局部变量被修改,可以使用final修饰 

    1. public class Final01 {
    2. public static void main(String[] args) {
    3. E e = new E();
    4. // e.TAX_RATE = 0.09;
    5. }
    6. }
    7. final class A{
    8. }
    9. // class B extends A{} 1)当不希望类被继承时,可以用final修饰.
    10. class C{
    11. // public final void hi(){ //2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰
    12. // System.out.println("C类的hi方法");
    13. // }
    14. }
    15. class D extends C{
    16. public void hi(){
    17. System.out.println("重写了子类的hi方法");
    18. }
    19. }
    20. class E{
    21. public final double TAX_RATE = 0.08;
    22. }
    23. class F{
    24. public void cry(){
    25. final double NUM = 0.01;
    26. // NUM = 0.9;
    27. System.out.println(NUM);
    28. }
    29. }

     二、final关键字使用注意事项和细节讨论


    1.final修饰的居性又叫常量,一般用XX_XX_XX_X来命名

    2.final修饰的属性在定义时必须赋初值并且以后不能再修改,赋值可以在如下位置之一

            ①定义时:如public final double TAX RATE=0.08;

            ②在构造器中

            ③代码块中。

    1. class AA{
    2. public final double TAX_RATE1 = 0.08;
    3. public final double TAX_RATE2;
    4. public final double TAX_RATE3;
    5. //①定义时:如public final double TAX RATE=0.08;
    6. //
    7. //②在构造器中
    8. //
    9. //③代码块中。
    10. public AA(){
    11. TAX_RATE2 = 1.1;
    12. }
    13. {
    14. TAX_RATE3 = 10.0;
    15. }
    16. }


    3.如果final修饰的属性是静态的,则初始化的位置只能是

    ①定义时        ②在静态代码块        不能在构造器中赋值。

    4.final类不能继承,但是可以实例化对象。

    5.如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承。

    1. public class FinalDetail01 {
    2. public static void main(String[] args) {
    3. new AA();
    4. new EE().cal();
    5. }
    6. }
    7. class DD{
    8. public final void cal(){
    9. System.out.println("cal()方法");
    10. }
    11. }
    12. class EE extends DD{
    13. }

    5.一般来说,如果类已经是final类了,就不需要再将方法修饰成final

    6.final不能修饰构造器方法(构造器)

    7.final和static往往搭配使用,效率更高,不会导致类加载底层编译器做了优化处理。

    1. public class FinalDetail02 {
    2. public static void main(String[] args) {
    3. System.out.println(BBB.num);
    4. }
    5. }
    6. class BBB{
    7. public final static int num = 10000;//去掉final会执行BBB代码块初始化
    8. //final和static往往搭配使用,效率更高,不会导致类加载底层编译器做了优化处理。
    9. static {
    10. System.out.println("BBB代码块被执行");
    11. }
    12. }

    8.包装类(Integer, Double,Float, Boolean等都是fina),String也是final类.

    三、final关键字的练习

    1.

    请编写一个程序,能够计算圆形的面积。要求圆周率为3.14.赋值的位置3个方式都写一下.

    1. public class FinalExercise01 {
    2. public static void main(String[] args) {
    3. Cirle cirle = new Cirle(6);
    4. System.out.println(cirle.cal());
    5. }
    6. }
    7. class Cirle{
    8. private double radius;
    9. private final double PI = 3.14;
    10. public Cirle(double radius) {
    11. this.radius = radius;
    12. }
    13. public double cal(){
    14. return radius * radius * PI;
    15. }
    16. }

    其实正常来说应该做成静态方法,不创建对象也能计算,但考虑到可能要保存实例的属性,用上面的也对

    下面给个static的

    1. public class FinalExercise01 {
    2. public static void main(String[] args) {
    3. System.out.println(Cirle.cal(6));
    4. }
    5. }
    6. class Cirle{
    7. private final static double PI = 3.14;
    8. public static double cal(double radius){
    9. return radius * radius * PI;
    10. }
    11. }

    2.

    下面的那个对 return x + 1 是+符号 没有在改变x

  • 相关阅读:
    Jetson Orin NX 开发指南(2): 基本环境配置
    linux下离线安装telnet
    【1569】jsp学生学籍管理系统Myeclipse开发sqlserver数据库web结构jsp编程计算机网页项目
    Kubernetes带你从头到尾捋一遍
    FB广告系列花费上限是否有必要设置?
    C语言 内存
    【Java UI】HarmonyOS 如何集成SlidingDrawer组件
    java遍历Map的方式
    spring-初识spring
    算法总结篇(1)——插入排序、选择排序以及快速排序
  • 原文地址:https://blog.csdn.net/qq_41891655/article/details/133996574
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号