【JAVA学习笔记】39 - final关键字

项目代码

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

一、final关键字基本介绍

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


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


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


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

public class Final01 {public static void main(String[] args) {E e = new E();// e.TAX_RATE = 0.09;}
}
final class A{}
// class B extends A{} 1)当不希望类被继承时,可以用final修饰.
class C{// public final void hi(){ //2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰//     System.out.println("C类的hi方法");// }
}
class D extends C{public void hi(){System.out.println("重写了子类的hi方法");}
}
class E{public final double TAX_RATE = 0.08;
}
class F{public void cry(){final double NUM = 0.01;// NUM = 0.9;System.out.println(NUM);}
}

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


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

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

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

        ②在构造器中

        ③代码块中。

class AA{public final double TAX_RATE1 = 0.08;public final double TAX_RATE2;public final double TAX_RATE3;//①定义时:如public final double TAX RATE=0.08;// //②在构造器中// //③代码块中。public AA(){TAX_RATE2 = 1.1;}{TAX_RATE3 = 10.0;}
}


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

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

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

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

public class FinalDetail01 {public static void main(String[] args) {new AA();new EE().cal();}
}
class DD{public final void cal(){System.out.println("cal()方法");}
}
class EE extends DD{}

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

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

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

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

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

三、final关键字的练习

1.

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

public class FinalExercise01 {public static void main(String[] args) {Cirle cirle = new Cirle(6);System.out.println(cirle.cal());}
}
class Cirle{private double radius;private final double PI = 3.14;public Cirle(double radius) {this.radius = radius;}public double cal(){return radius * radius * PI;}
}

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

下面给个static的

public class FinalExercise01 {public static void main(String[] args) {System.out.println(Cirle.cal(6));}
}
class Cirle{private final static double PI = 3.14;public static double cal(double radius){return radius * radius * PI;}
}

2.

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宝塔部署nginx遇到的400错误和502错误

在部署express项目的过程中,由于我的代码有些变化,于是在宝塔面板上我又重新上传了一下我的项目,结果阴差阳错的被nginx反向代理配置不当引起的400错误request header or cokkie is too large和自己代码逻辑问题引起的502 bad gataway给绊倒了…

源码解析SpringMVC处理请求的完整流程

1.WebMvcAutoConfiguration EnableWebMvcConfiguration自动装配类负责加载SpringMVC涉及的HandlerAdapter、HandlerMapping、ExceptionHandlerExceptionResolver等。 SpringMVC利用 DispatchServlet 处理上游Tomcat的请求时,会被HandlerMapping、HandlerAdapter的相关子类分别…

vue3中computed的用法

一、完整代码 <template><div class"about"><h1>Computed的用法</h1><h3>姓:{{ person.firstName }}</h3><input type"text" v-model"person.firstName"><h3>名:{{ person.lastName }}</h3…

深度学习中的不确定性综述

领域学者&#xff1a; http://www.gatsby.ucl.ac.uk/~balaji/ 论文标题&#xff1a; A Survey of Uncertainty in Deep Neural Networks 论文链接&#xff1a; https://arxiv.org/pdf/2107.03342.pdf 概要 在过去的十年中&#xff0c;神经网络几乎遍及所有科学领域&#x…

2021年下半年 软件设计师 上午试卷(1-28)

计算机指令系统采用多种寻址方式。立即寻址是指操作数包含在指令中&#xff0c;寄存器寻址是指操作数在寄存器中&#xff0c;直接寻址是指操作数的地址在指令中。这三种寻址方式获取操作数的速度 &#xff08;1&#xff09; 。 &#xff08;1&#xff09; A. 立即寻址最快&am…

Springcloud介绍

1.基本介绍 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用Spring Boot的开发风格做到一键启动和部署。Spring …

基于YOLO实现的口罩佩戴检测 - python opemcv 深度学习 计算机竞赛

文章目录 0 前言1 课题介绍2 算法原理2.1 算法简介2.2 网络架构 3 关键代码4 数据集4.1 安装4.2 打开4.3 选择yolo标注格式4.4 打标签4.5 保存 5 训练6 实现效果6.1 pyqt实现简单GUI6.3 视频识别效果6.4 摄像头实时识别 7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xf…

树与二叉树(考研版)

文章目录 树与二叉树树的基本概念结点、树属性的描述树的性质 二叉树的概念二叉树的性质二叉树的构建二叉树的遍历先序遍历中序遍历后序遍历层次遍历 递归算法和非递归算法的转换源代码 线索二叉树二叉树的线索化线索二叉树 找前驱/后继 树和森林树的存储 树与二叉树的应用哈夫…

Python 深度学习入门之CNN

CNN 前言一、CNN简介1、简介2、结构 二、CNN简介1、输出层2、卷积层3、池化层4、全连接层5、输出层 前言 1024快乐&#xff01;1024快乐&#xff01;今天开新坑&#xff0c;学点深度学习相关的&#xff0c;说下比较火的CNN。 一、CNN简介 1、简介 CNN的全称是Convolutiona…

java中的异常,以及出现异常后的处理【try,catch,finally】

一、异常概念 异常 &#xff1a;指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。 注意: 在Java等面向对象的编程语言中&#xff0c;异常本身是一个类&#xff0c;产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的…

Nginx 配置文件解读

一.配置文件解读 nginx配置文件主要分为四个部分&#xff1a; main{ #&#xff08;全局设置&#xff09;http{ #服务器配置upstream{} #&#xff08;负载均衡服务器设置&#xff09;server{ #&#xff08;主机设置&#xff1a;主要用于指定主机和端口&#xff09;location{} …

CUDA学习笔记(十四) Constant Memory

转载至https://www.cnblogs.com/1024incn/tag/CUDA/ CONSTANT MEMORY constant Memory对于device来说只读但是对于host是可读可写。constant Memory和global Memory一样都位于DRAM&#xff0c;并且有一个独立的on-chip cache&#xff0c;比直接从constant Memory读取要快得多…

【C++笔记】C++继承

【C笔记】C继承 一、继承的概念二、继承的语法和权限三、父类和子类成员之间的关系3.1、子类赋值给父类(切片)3.2、同名成员 四、子类中的默认成员函数4.1、构造函数4.2、拷贝构造4.3、析构函数 五、C继承大坑之“菱形继承”5.1、什么是“菱形继承”5.2、解决方法 一、继承的概…

数据结构-- 并查集

0. 引入 并查集是来解决等价问题的数据结构。 离散数学中的二元关系。 等价关系需满足自反性、对称性、传递性。 a ∈ S , a R a a R b & b R a a R b ∩ b R c > a R c a \in S, aRa \\ aRb \& bRa \\ aRb \cap bRc >aRc a∈S,aRaaRb&bRaaRb∩bRc>a…

【Opencv】OpenCV使用CMake和MinGW的编译安装出错解决

编译时出现的错误&#xff1a; mingw32-make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2 Makefile:161: recipe for target ‘all’ failed mingw32-make: *** [all] Error 2解决方法&#xff1a; 根据贴吧老哥的解答&#xff0c;发现是mingw版本有问题导…

【JAVA学习笔记】43 - 枚举类

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter11/src/com/yinhai/enum_ 〇、创建时自动填入版权 作者等信息 如何在每个文件创建的时候打入自己的信息以及版权呢 菜单栏-File-setting-Editor-File and Code Templaters -Includes-输入信…

自动化测试07Selenium01

目录 什么是自动化测试 Selenium介绍 Selenium是什么 Selenium特点 工作原理 SeleniumJava环境搭建 Selenium常用的API使用 定位元素findElement CSS选择语法 id选择器&#xff1a;#id 类选择 .class 标签选择器 标签名 后代选择器 父级选择器 自己选择器 xpath …

2.1 向量与线性方程组

一、行图像与列图像 线性代数的中心问题是求解线性方程组。线性的意思是这些方程的未知数是一次的&#xff0c;即每个未知数只会乘数字&#xff0c;而不会出现 x x x 与 y y y 相乘的项。下面是一个由两个未知数组成的方程组&#xff1a; 两个方程 两个未知数 { x − 2 y 1…

杂谈:DC对Verilog和SystemVerilog语言的支持

DC对Verilog和SystemVerilog语言的支持 设计语言用哪种&#xff1f;Design Compiler对二者的支持简单的fsm电路测试测试结果对比写在最后 设计语言用哪种&#xff1f; 直接抛出结论&#xff1a;先有电路&#xff0c;后为描述。设计端而言&#xff0c;没有语言的高低好坏&#…

妙手ERP功能更新丨Shopee全球产品支持使用定价模板修改价格、Ozon新增SKU模板 、Temu采集箱支持添加货源链接......

为了给卖家朋友带来更好的使用体验&#xff0c;更高效地运营跨境店铺&#xff0c;妙手ERP在近两周优化了以下多项功能。 01、平台授权模块 TikTok - 支持授权美国跨境店及ACCU店铺&#xff0c;TikTok平台各功能均可使用 02、产品模块优化 全平台 - 支持产品重量单位切换 Sho…