java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例

可能使用到final的情况有3种:数据、方法和类。

一、final数据

对于基本类型,final使数值恒定不变;而对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法把它改为指向另一个对象。然而,对象本身却是可以被修改的。

class Value{

int i;

public Value(int i){this.i=i;}

}

public class FinalData{

private final int valueOne=1;

private int valueTwo=2;

private final Value v1=new Value(11);

private Value v2=new Value(22);

public static void main(String[] args){

//! valueOne=3; 错误,静态不能更改

valueTwo=3; //可以更改

//! v1=new Value(33); 不可更改引用

v1.i+=1; //可以更改内容

v2=new Value(33); //非final,可以更改引用

}

}

注:带有恒定初始值(即,编译器常量)的final static 基本类型全用大写字母命名,并且字与字之间用下划线隔开。

public static final int VALUE_ONE=3;

必须在域的定义处或者每个构造器中用表达式对final进行赋值,这正是final域在使用前总是被初始化的原因所在。

二、final方法

使用final方法的原因是:把方法锁住,以防任何继承类修改它的含义,这是出于设计的考虑:想要确保在继承中使方法行为保持一致,并且不会被覆盖。

类中所有的private方法都隐式地指定为是final的。由于无法取用final方法,所以也就无法覆盖它。

class WithFinals{

private final void f(){print("Hello World");}

private void g(){ print("WithFinals.g()");}

}

class OverridingPrivate extends WithFinals{

private final void f(){ print("OverridingPrivate.f()");}

private void g(){ print("OverridingPrivate.g()")}

}

class OverridingPrivate2 extends OverridingPrivate{

public final void f(){ print("OverrindingPrivate2.f()")}

public void g(){ print("OverridingPrivate2.g()")}

}

public class FinalOverriding{

public static void main(String[] args){

OverridingPrivate2 op2=new OverridingPrivate2();

op2.f();

op2.g();

//向上转型

OverridingPrivate op1=op2;

//但是你不能调用下面的方法

//! op1.f();

//! op1.g();

//向上转型

WithFinals wf=op2;

//同样不能调用下面的方法

//!wf.f();

//!wf.g();

}

}

/* OverridingPrivate2.f() OverridingPrivate2.g() */

“覆盖”只有在某方法是基类的接口的一部分时才会出现。即,必须能将一个对象向上转型为它的基本类型并调用相同的方法。如果某方法为private,它就不是基类的接口的一部分。它仅是一些隐藏于类中的程序代码,只不过是具有相同的名字。如果在导出类中以相同的名称生成一个public、protected或包访问权限方法,那么该方法并没有覆盖基类的方法,仅是生成了一个新的方法。

三、final类

当某个类的整体定义为final时,就表明了你不打算继承该类,而且也不允许别人这样做。

final class Demo{

int i=1;

final int j=2;

void f(){}

}

final类不能被继承。final类的域可以根据个人意愿选择是或者不是final,然而,由于final类禁止继承,所以final类中的所有方法都隐式指定为final的,因为无法覆盖它们。在final类中可以给个方法添加final修饰词,但这不会增添任何意义。

PS:总结自《Thinking in Java Fourth Edition》

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

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

相关文章

mr图像翻转的原因_MRI图像常见问题及对策

1MRI图像常见伪影及对策伪影是指MR图像中与实际解剖结构不相符的信号,可以表现为图像变形、重叠、缺失、模糊等。每一幅MRI图像都存在不同程度的伪影。MRI检查中伪影主要造成三个方面的问题:(1)使图像质量下降,甚至无法分析;(2)掩…

java icon动态变换,以编程方式自动更改ImageIcon [Java]

I am making a simple game right now. When a JButton is clicked, the ImageIcon of a JLabel is supposed to change. How can I accomplish this?解决方案Simple, just quickly run setIcon() on the JLabel via the action listener of the button.An example:if ("…

shell打开wifi命令_MacWiFi:一款管理Mac系统WIFI的命令行工具(包含交互式Shell)...

今天给大家介绍的是一款名叫mac-wifi的命令行工具,它可以管理macOS系统的无线网络,并且还提供了交互式Shell。mac-wifimac-wifi脚本可以查询或管理macOS平台上的WiFi配置以及网络环境信息,脚本代码在最小化的类中实现了针对macOS环境的设计逻…

java电脑类的接口_java 一个类实现两个接口的案例

直接用英文逗号分隔就可以了,比如:?12345678910111213141516171819inerface IHello {String sayHello(String name);}interface IHi {String sayHi(String name);}class ServiceImplimplements IHello, IHi {// 实现三个四个。。。n个接口都是使用逗号分…

单片机 架构 程序 经验总结_单片机学习心得体会_经验总结

单片机简介单片机主要由运算器、控制器和寄存器三大部分构成。其中,运算器由算术逻辑单元(ALU)、累加器、寄存器等构成,首先累加器和寄存器向ALU输入两个8位源数据,其次ALU完成源数据的逻辑运算,最后将运算结果存入寄存器中;控制器…

java按照io流向基类_Java IO详解

1 Java IO流的概念,分类1.1 Java IO流的概念java的IO是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。流的本质是数据传输&#xff0c…

go语言os.exit(1)_在Golang中各种永远阻塞的姿势

在Golang中各种永远阻塞的姿势Go的运行时的当前设计,假定程序员自己负责检测何时终止一个goroutine以及何时终止该程序。可以通过调用os.Exit或从main()函数的返回来以正常方式终止程序。而有时候我们需要的是使程序阻塞在这一行。使用sync.WaitGroup一直等待直到Wa…

基于java二手书论文_java毕业设计_springboot框架的二手书交易管理与实现

今天介绍一个java毕设题目, 题目内容为springboot框架的二手书交易管理与实现, 是一个采用b/s结构的javaweb项目, 采用java语言编写开发工具eclipse, 项目框架jspspringbootmybatis, 二手书交易管理与实现的信息存储于mysql中, 并基于mybatis进行了orm封装, 该二手书交易管理与…

vue 分享微信传参_vue实现微信分享链接添加动态参数的方法

微信分享时 分享链接携带参数可能不是固定的 需要在分享的前一刻才知道 这里就是动态设置分享链接的基本写法 代码不是那么详尽 但大致流程如下1.安装引用jssdknpm install --save weixin-js-sdkconst wxrequire(weixin-js-sdk)2.通过config接口注入配置信息const jsApiList […

linux挂载cifs磁盘_linux使用windows磁盘,挂载共享目录

实例说明:客户两台服务器,一台web服务器(linux)只有50G,课程资源太多太大导致磁盘不够用;客户的文档服务器(windows)磁盘很大超过1T,所以产生了,将web资源使用文档服务器磁盘的想法;windows文档服务器192.168.-.-用户名…

java怎么给list集合排序_java list集合排序按某一属性排序操作

我就废话不多说了,大家还是直接看代码吧~public List sortList(List list){Collections.sort(list, new Comparator(){Overridepublic int compare(FreightM o1, FreightM o2) {if(o1.getType()0){return -1;}else{return 1;}}});return list;}实现compareTo()方法&…

excel显著性检验_使用Excel2016比较两组数据显著性差异

软件信息:Excel for Mac版本:16.26(19060901)许可证:Office 365订阅步骤一:导入(输入)数据步骤二:为Excel添加分析工具的加载项插件,路径为:工具→Excel加载项→分析工具库步骤三:开…

java 标准输入流 关闭 打开_java--标准输入输出流

//读取键盘录入的数据写到a.txt//方式一private static void method() throws IOException {//创建输入流对象InputStream is System.in;Reader r new InputStreamReader(is);//创建输出流对象FileWriter fw new FileWriter("a.txt");//读取数据byte[] bys new b…

adb native raact 夜神_React-Native安装及环境搭建(夜神模拟机运行)

React-Native环境搭建及运行必须安装的依赖有:Node、JDK 和 Android Studio。Node去官方下载,安装一直下一步下一步就好,最好是改下安装路径。这里主要记录JAVA JDK和Android Studio.一.安装JAVA JDKJAVA和React Native没有直接关系。React N…

php object keys_原生js中Object.keys方法详解

实际开发中,有时需要知道对象的所有属性,原生js提供了一个方法Object.keys()。Object.keys(obj)返回的是一个数组,该数组的所有元素都是字符串。这些元素是来自于给定的obj可直接枚举的属性,这些属性的顺序与手动遍历该对象属性时…

中望3d快捷键命令大全_CAD、3D快捷命令

1、对象特性ADC, *ADCENTER(设计中心“Ctrl+2”)CH, MO *PROPERTIES(修改特性“Ctrl+1”)MA, *MATCHPROP(属性匹配)ST, *STYLE(文字样式)COL, *COLOR(设置颜色)LA, *LAYER(图层操作)LT, *LINETYPE(线形)LTS, *LTSCALE(线形比例)LW, *LWEIGHT(线宽)UN, *U…

php 字符串函数 教程_PHP 字符串获取 substr 与 strstr 函数

PHP 字符串获取用于从字符串中获取指定字符串。相关函数如下:substr():从字符串中获取其中的一部分strstr():查找字符串在另一个字符串中第一次出现的位置,并返回从该位置到字符串结尾的所有字符subchr():同 strstr()s…

can通道采样频率_CAN采样点设置为多少合适?设置不对会咋样?

网上有人说道&#xff1a;(1)一般配置在75-80%的位置(2)选择采样点位置在85%左右为佳(3)75% when 波特率 > 800K80% when 波特率 > 500K87.5% when 波特率 < 500K那么到底是多少呢&#xff1f;本博主在ISO11898-1没有找到确切的值。但是cia官网找到了(http:…

简单的php,php简单语句

标签&#xff1a;(01)PHP标记 <?php ?>?>(02)输出语句//echo 不加括号能打印多个值//print 有返回值不能打印多个值//die() 输出并退出程序//exit() 输出并退出程序//printf() 格式化输出//sprintf() 格式化返回//var_dump() 输出全部信息和内…

内固定取出术后护理_股骨内固定钢板取出术后护理查房记录范文

病情分析&#xff1a;2009年10月26日 手术后精神,饮食,睡眠,体重变化等指导意见&#xff1a;一, 护理业务查房&#xff1a;  1, 临床临床护理查房&#xff1a;  是对新入,危重病人的现存护理问题,措施,护理效果,护理质量进行的护理查房,目的是检查,指导责任护士的工作质量,…