java谜题--final变量

Java实践中的规范问题 最近学习了Java实践排位赛中,对Java使用过程中的一些细节问题的注意。都是平时编程过程中可能不在意的一些小问题,有可能导致大的错误,特此记录一下。 主要包括: “JAVA基础语句”编程规范 “类的使用”编程规范 “异常处理”编程规范 分为三个部分的编程规范,在以后使用Java做工程项目的时候需要注意。 一、“JAVA基础语句”编程规范 1.switch语句要有default分支,除非switch的条件变量是枚举类型 2.使用break跳出整个switch语句 3.if-else if类型的条件判断, 阅读详情

谜题72:终极危难

本谜题旨在检验当你试图隐藏一个final域时将要发生的事情。下面的程序将做些什么呢?
class Jeopardy {
    public static final String PRIZE = "$64,000";
}

public class DoubleJeopardy extends Jeopardy {
    public static final String PRIZE = "2 cents";
    public static void main(String[ ] args) {
        System.out.println(DoubleJeopardy.PRIZE);
    }
}

因为在Jeopardy中的PRIZE域被声明为是public和final的,你可能会认为Java语言将阻止你在子类中重用该域名。毕竟,final类型的方法不能被覆写或隐藏。如果你尝试着运行该程序,就会发现它可以毫无问题地通过编译,并且将打印2 cents。出什么错了呢?

可以证明,final修饰符对方法和域而言,意味着某些完全不同的事情。对于方法,final意味着该方法不能被覆写(对实例方法而言)或者隐藏(对静态方法而言)[JLS 8.4.3.3]。对于域,final意味着该域不能被赋值超过一次[JLS 8.3.1.2]。关键字相同,但是其行为却完全不相关。

在该程序中,final域DoubleJeopardy.PRIZE隐藏了final域Jeopardy.PRIZE,其净损失达到了$63,999.98。尽管我们可以隐藏一个域,但是通常这都是一个不好的念头。就像我们在谜题66中所讨论的,隐藏域可能会违反包容性,并且会混淆我们对类型与其成员之间的关系所产生的直觉。

如果你想保证在Jeopardy类中的奖金可以保留到子类中,那么你应该用一个final方法来代替final域:

class Jeopardy {
    private static final String PRIZE = "$64,000";
    public static final String prize() {
         return PRIZE;
   }
}

对语言设计者来说,其教训是应该避免在不相关的概念之间重用关键字。一个关键字应该只在密切相关的概念之间重用,这样可以帮助程序员构建关于易混淆的语言特性之间的关系的印象。在Java的final关键字这一案例中,重用就导致了混乱。应该注意的是,作为一种有年头的语言来说,在无关的概念之间重用关键字是它的一种自然趋势,这样做可以避免引入新的关键字,而引入新的关键字会对语言的稳定性造成极大的损害。当语言设计者在考虑该怎么做时,总是在两害相权取其轻。

总之,要避免在无关的变量或无关的概念之间重用名字。对无关的概念使用有区别的名字有助于让读者和程序员区分这些概念。

Python通用编程规范-04 编码 文章目录4.1 `None`值比较4.2 模块导入控制 __all__4.3 字典取值的推荐方式(`get`)4.4 列表切边不推荐负步长值4.5 参数的类型检查推荐`isinstance`4.6 使用列表推导式替换循环4.7 功能代码应该封装在函数或类中4.8 精确数值计算的场景使用`Decimal`模块4.9 避免对不同对象使用同一个变量名4.10 类方法的装饰4.11 使用包(`package`)形式管理不同目录下的源码4.12 避免在代码中修改`sys.path`列表4.13 使用枚举替代`rang 阅读详情

相关推荐

RocketMq面板访问异常 com.alibaba.fastjson.JSONException: not close json text, token : string

rocketmq JSONException: not close json text, token : string 问题解决

qq_21067307的博客 5573

Java解惑学习有感(七)---更多的类之谜

谜题66:一件私事 当你在声明一个域、一个静态方法或一个嵌套类型时,如果其名字与基类中相对应的某个可访问的域、方法或类型相同,就会发生隐藏。隐藏是容易产生混乱的:违反包容性的隐藏域在某种意义上是特别有害的。更一般地讲,除了覆写之外,要避免名字重用。 谜题67:对字符串上瘾 要避免重用类名,尤其是 Java 平台类的类名。千万不要重用 java.lang 包内的类名,相同的教训也适用于类库的设

BINGO的博客 1145

.NET+Vue企业级RBAC权限平台:开箱即用的生产就绪方案

RBAC(基于角色的访问控制)是企业系统安全治理的基础模型,其核心在于将用户、角色与权限解耦,通过动态能力组合实现细粒度管控。在真实工程中,RBAC需突破静态角色限制,支持时间维度授权、前后端双重鉴权、行级数据范围控制等关键能力。本文聚焦于一套已落地金融、政务、制造等多行业的生产级实现——基于.NET Minimal API与Vue 3的前后端分离架构,提供菜单/按钮/接口/数据四层权限控制,内置滑动过期JWT、Redis权限缓存、动态路由加载与权限指令等开箱即用能力,显著降低权限配置与审计成本。

weixin_33326218的博客 274

JAVA中出现隐藏、遮蔽、和遮掩的情况

@TOCJAVA继承父类 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式

夜深来买醉丶的博客 5103

保姆级教程:用NVIDIA Jetson AGX Xavier和GMSL2相机搭建8路车载视觉原型系统

本文提供了一份详细的教程,指导如何使用NVIDIA Jetson AGX Xavier开发板和GMSL2相机搭建8路车载视觉原型系统。内容涵盖硬件选型、系统架构设计、软件环境配置、多路视频采集实现以及性能优化与问题排查,帮助开发者快速掌握GMSL2技术在车载视觉系统中的应用。

weixin_42525005的博客 294

几何修复_ANSYS流体分析:几何前处理

建模及几何处理工具非常多,选择起来让人眼花缭乱。对于仿真而言,高效的对几何进行清理及生成符合仿真要求的几何至关重要。ANSYS SpaceClaim Direct Modeler是基于直接建模思想的新一代3D高效率建模和几何编辑修补软件。SCDM提供了当今最快速、最富有创意的直接建模解决方案。由于它的直接建模能力即使对于导入的其它3D模型(如catia、proe、solid works创建的几何)...

weixin_35778830的博客 2416

Python编码规范(上)

1

就叫一片白纸的博客 1777

Dify+firecrawl:一个超好用的网页转Markdown API,打造你的第一个能检索爬虫RAG知识库的聊天机器人

Firecrawl是一个超简单的API服务——你扔给它一个URL,它就能把整个网站(包括子页面!)的内容自动抓下来,并且转换成干净、易读的Markdown格式。不用配置网站的站点地图,不用写爬虫规则,API调一下,数据直接到手。接下来我们一起本地部署吧!

2501_91673550的博客 2989

Java谜题畅读版之更多的类谜题

谜题66:一件私事 在下面的程序中,子类的一个域具有与超类的一个域相同的名字。那么,这个程序会打印出什么呢?  [java] view plaincopyprint? class Base {       public String className = "Base";   }   class Derived extends Base {

子谦 840

gephi生成网络关系图_路网拓扑重建专题 (3) 网络图生成

城市道路网建模在获得基础路网之后,需要考虑道路交通网络的描述与表达问题。网络是将现实世界中的事物及其关系进行适当的抽象,构造成由节点和边按照一定规则组成的形式。一个实体网络可以由有限个“节点”集合与“边”集合构成的图表示,即网络表示为。对于一个由个节点组成的无权复杂网络,该图有邻接矩阵,这里。根据研究对象不同,建模方法主要包括原始法[1]和对偶法[2]两种,见图1,字母a-j为交叉口编号...

weixin_39761195的博客 3502

【ArcGIS遇上Python】批量提取多波段影像至单个波段

本案例基于ArcGIS python,将landsat影像的7个波段影像数据,批量提取至单个波段。

智慧空间实验室 2073

java异常体系____《Java Puzzles》中关于异常的几个谜题

Java异常(三) 《Java Puzzles》中关于异常的几个谜题   概要 本章介绍《Java Puzzles》中关于异常的几个谜题。这一章都是以代码为例,相比上一章看起来更有意思。内容包括: 谜题1: 优柔寡断 谜题2: 极端不可思议 谜题3: 不受欢迎的宾客 谜题4: 您好,再见! 谜题5: 不情愿的构造器 谜题6: 域和流 谜题7: 异常为循环而抛 转载请注

523

S7-1200中OB100和OB20中断使用方法及示例程序说明(图文)

S7-1200中OB100和OB20中断使用方法及示例程序说明(图文)

Robot_PLC_HMI_Automation 8583

Java异常(三) 《Java Puzzles》中关于异常的几个谜题

转自:Java异常(三) 《Java Puzzles》中关于异常的几个谜题 概要 本章介绍《Java Puzzles》中关于异常的几个谜题。这一章都是以代码为例,相比上一章看起来更有意思。内容包括: 谜题1: 优柔寡断 谜题2: 极端不可思议 谜题3: 不受欢迎的宾客 谜题4: 您好,再见! 谜题5: 不情愿的构造器 谜题6: 域和流 谜题7: 异常为循环而抛

liken的专栏 734

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

七个java谜题

在2009年的JavaOne大会上,Joshua Bloch和Neal Gafter又为我们带来的7道谜题,看了感觉自己的java基础很不扎实。 1.Lifes Persistent Questions public class SimpleQuestion { static boolean yesOrNo(String s) { s =

pfpfpfpfpf的专栏 1474

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

谜题72:final相关的几个知识点

本谜题旨在检验当你试图隐藏一个final域时将要发生的事情。下面的程序将做些什么呢? class Jeopardy { public static final String PRIZE = "$64,000"; } public class DoubleJeopardy extends Jeopardy { public static final String PRIZE =

jiqikewang的专栏 552

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java谜题畅读版之循环谜题

谜题24:尽情享受每一个字节 [java]view plaincopyprint? publicclassBigDelight{ publicstaticvoidmain(String[]args){ for(byteb=Byte.MIN_VALUE;b<Byte.MAX_VALUE;b++){ if(b==0x90) Sys...

子谦 230

java迷题_Java谜题——类谜题(二)

1、域的隐藏代码如下:classBase {public String className = "Base";}class Derived extendsBase {private String className = "Derived";}public classPrivateMatter {public static voidmain(String[ ] args) {System.out.p...

weixin_39544101的博客 253

Java谜题畅读版之字符谜题

谜题11:最后的笑声 [java] view plaincopyprint? public class LastLaugh{       public static void main(String[] args){           System.out.print("H"+"a");           System.out.print('H

子谦 852

java puzzles_Java异常(三) 《Java Puzzles》中关于异常的几个谜题

概要谜题1: 优柔寡断看看下面的程序,它到底打印什么?public classIndecisive {public static voidmain(String[] args) {System.out.println(decision());}private static booleandecision() {try{return true;}finally{return false;}}}运行结...

weixin_39630637的博客 173

java谜题--java运行时修改引用类的静态常量

谜题93:类的战争 下面这个谜题测试了你关于二进制兼容性(binary compatibility)的知识:当你改变了某个类所依赖的另外一个类时,第一个类的行为会发生什么改变呢?更特殊的是,假设你编译的是如下的2个类。第一个作为一个客户端,第二个作为一个库类,会怎么样呢: public class PrintWords { public static void main(Strin

想飞的鱼 2352

Java谜题畅读版之异常谜题

谜题36:优柔寡断 下面的程序打印的是什么呢?甚至,它是合法的吗? [java]view plaincopyprint? publicclassIndecisive{ publicstaticvoidmain(String[]args){ System.out.println(decision()); } staticbooleand...

子谦 162
上一篇: 子类与父类实例变量,静态方法调用
下一篇: java谜题--Thread.join()方法容易忽略的地方
feiyu8607
博客等级 码龄18年 26粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值