wcg总决赛_关于总决赛

wcg总决赛

可以将变量声明为final。 最终变量只能分配一次。 如果分配了最终变量,则将导致编译时错误,除非在分配前立即将其明确取消分配。

分配任何最终变量后,将永远无法对其进行更改。 如果变量引用任何对象的任何实例,它将继续引用相同的对象实例,但是可以修改对象的内部状态。

有效地最终

且仅当且仅当变量才可以被视为有效的最终变量

  1. 它不是最终的
  2. 分配发生一次

我发现有效解释final的最简单方法是想象将final修饰符添加到变量声明中。 如果通过此更改,程序在编译时和运行时都继续以相同的方式运行,则该变量实际上是最终变量。

在Lamda表达式中使用

使用但未在lambda表达式中声明的任何局部变量,形式参数或异常参数必须声明为final或有效地为final,否则尝试使用时会发生编译时错误。

将局部变量捕获限制为有效的不可变变量的目的是将开发人员的注意力吸引到更容易并行化的,自然线程安全的技术上。 如果管理不当,可变字段始终是潜在的并发问题来源。 禁止通过lambda表达式捕获字段将降低实用性,而无需执行任何操作。

最终关键字的使用

根据我的观点,最好在适当的时候将局部变量,方法参数,字段变量标记为final。 它警告其他开发人员不要意外修改值。 除此之外,它还向编译器发出信号以优化类文件。 有很多反对此说法的说法,即在源文件中使用final关键字不能优化类文件是不正确的。 我强烈建议您看一下Robert Simons Jr编写的Hardcore Java ,其中详细介绍了final关键字的使用及其优化。

我觉得使用final关键字会使任何开发人员都清楚代码的意图。 将变量设为final可以减轻程序员的负担,使他们可以遍历代码以查看变量在初始化后是否已更改。 就在多线程环境中维护状态而言,它也比非最终变量安全得多。

根据RustyX在StackOverflow 线程中提供的详细基准测试,以下程序演示了明显的性能提升:

public class FinalTest {public static final int N_ITERATIONS = 10_00_000;public static String testFinal() {final String a = "a";final String b = "b";return a + b;}public static String testNonFinal() {String a = "a";String b = "b";return a + b;}public static void main(String[] args) {long tStart, tElapsed;tStart = System.currentTimeMillis();for (int i = 0; i < N_ITERATIONS; i++)testFinal();tElapsed = System.currentTimeMillis() - tStart;System.out.println("Method with finals took " + tElapsed + " ms");tStart = System.currentTimeMillis();for (int i = 0; i < N_ITERATIONS; i++)testNonFinal();tElapsed = System.currentTimeMillis() - tStart;System.out.println("Method without finals took " + tElapsed + " ms");}}

结果非常出色:

Method with finals took 5 ms
Method without finals took 273 ms

我个人也更倾向于使用不可变的类,并使用final关键字作为实例变量来表明这一点。 根据有效Java的 Joshua Bloch所说,

不可变的类比可变的类更容易设计,实现和使用。 它们不易出错,并且更安全。。此外,不可变对象可以恰好处于一种状态,即创建该对象的状态。 vs可变对象可以具有任意复杂的状态空间。

静态代码分析工具

适当时,诸如PMD之类的静态分析工具是使用final关键字的最大支持者之一。 有关更多信息,请查看此 。 如果缺少final关键字,则将FindBugs和CheckStyle配置为对变量发出警告。 我发现此链接支持在Checkstyle中使用final关键字:

在执行该方法的算法期间更改参数的值可能会造成混淆,应该避免。 让Java编译器阻止这种编码样式的一种好方法是将参数声明为final。

Eclipse保存动作

Eclipse IDE提供了有用的“ 保存操作首选项”页面 ,该页面使您可以应用主要侧重于优化源代码的更改。 保存操作之一是在适当的时候将最终关键字应用于变量。

结论

在清晰的设计和可读性方面,我支持在源文件中使用final关键字,而我的其他Java开发人员中很少有人因为它带来的视觉混乱而与我不同意。 我同意,在局部变量,实例变量,方法参数,构造函数参数,catch子句中使用final关键字似乎可以增加视觉混乱和冗长。 但是,如果有什么可以帮助任何未来的开发人员或维护人员更快,更可靠,更有效地执行其工作的,我们应该加以利用。

但是,当然,这全都是个人喜好;-)我很想听听您对此的意见。

翻译自: https://www.javacodegeeks.com/2017/07/all-about-finals.html

wcg总决赛

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

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

相关文章

python dump函数用法_Python中json库的load和dump函数

相信很多朋友都对python里面的json库非常熟悉&#xff0c;json这个东西简明易懂&#xff0c;还能储存数据&#xff0c;实在是非常方便。我一开始使用json是从爬虫接触的&#xff0c;那个时候只知道json.loads和json.dumps&#xff0c;当时ide确实会自动填充load函数和dump函数&…

如何彻底禁用Chrome浏览器的缓存功能

禁止Chrome浏览器的缓存功能有几种方式&#xff1a; 使用Shift F5强制刷新缓存。实际使用中我们发现&#xff0c;这种方法对于部分网页的更改并不能做到释放缓存的作用&#xff0c;尤其是无法释放DNS缓存。 使用隐身模式Shift Control N. 这种方法只能在打开的页面上消除之…

java int integer内存_java中一个integer对象的内存占用是多少?可以通过java方法输出吗?...

今天翻记录看到了自己15年3月份提的问题&#xff0c;现在已经18年6月份了&#xff1b;去年线上项目出现内存瓶颈&#xff0c;原因是缓存的玩家角色数据过多&#xff0c;在长时间不停服的情况下&#xff0c;导致数据越来越膨胀&#xff0c;之前没有清除无用缓存的机制&#xff0…

Linux命令行中的特殊符号_特殊字符

常用的特殊符号 符号说明#1.表示注释&#xff1b;2.命令提示符~表示用户主目录。切换到用户主目录下&#xff1a;cd ~&#xff0c;切换到用户主目录下的bin目录&#xff1a;cd ~/bin~表示当前目录。切换到当前目录下wwwroot目录&#xff1a;cd ~/wwwroot~-表示上次的工作目录。…

微信小程序css 华文琥珀_琥珀项目:较小的,面向生产力的Java语言功能

微信小程序css 华文琥珀Brian Goetz最近的消息欢迎来到琥珀&#xff01; 介绍Project Amber &#xff08; OpenJDK的一部分&#xff0c; 最初于1月提出 &#xff09;。 Goetz通过介绍“欢迎使用Amber项目&#xff0c;这是我们面向特定生产力的Java语言JEP的孵化场”的介绍打开了…

windows查看器无法打开图片_关于windows微软商城无法打开 错误代码0x80004003问题...

我本来是商城可以进 但是一打开里面的东西就无法打开 按下面的刷新就闪退 如下图操作桌面winr 运行 services.msc然后找到windows update打开就行 但是开启了系统会自动更新若是修改时显示拒绝访问桌面winr 输入regedit打开注册表 注册表找到HKEY_LOCAL_MACHINESYSTEMCurrentCo…

win10 java 反编译_win10下对.java源文件进行编译和反编译的步骤

1、先写好代码&#xff0c;如下找了个示例代码&#xff0c;文件名是Mutex.java&#xff1a;package com.huangshiyi.concurrent.cha04;import java.util.concurrent.TimeUnit;public class Mutex {private final static Object MUTEX new Object();public void accessResource…

Linux 删除指定目录下的文件/删除文件

文章目录删除当前目录下的所有类型的文件删除指定目录下的所有类型的文件用 find 命令在当前目录下查找普通文件并删除用 find 命令在指定目录下查找普通文件并删除用 find 命令的处理动作将当前目录及其子目录下的普通文件删除用 find 命令的处理动作将指定目录及其子目录下的…

电容屏物体识别_相比传统的触摸屏,电容式触摸屏的优势

点击蓝字&#xff0c;轻松关注今日话题 如今&#xff0c;我们的身边有着许多电子产品&#xff0c;主要是因为它便于我们的生活&#xff0c;所以我们的身边出现了许多触摸屏。对于电子产品&#xff0c;我们使用之前要了解清楚它的使用性能&#xff0c;掌握多点信息&#xff0c;这…

gatling的环境配置_将Gatling集成到Gradle构建中–了解SourceSet和配置

gatling的环境配置我最近在一个项目中工作&#xff0c;我们不得不将出色的负载测试工具Gatling集成到基于Gradle的版本中。 有可用的gradle插件使此操作变得容易&#xff0c;其中有两个是this和this &#xff0c;但是对于大多数需求而言&#xff0c;只需简单执行命令行工具本身…

java底层机制_Java同步机制的底层实现

在多线程编程中我们会遇到很多需要使用线程同步机制去解决的并发问题&#xff0c;而这些同步机制就是多线程编程中影响正确性和运行效率的重中之重。这不禁让我感到好奇&#xff0c;这些同步机制是如何实现的呢&#xff1f;好奇心是进步的源泉&#xff0c;就让我们一起来揭开同…

Linux下常用文本处理命令

Linux下面有很多经典的非常有用的命令&#xff0c;其中处理文本的命令就有很多。这些小工具经过了几十年时间的洗礼&#xff0c;现在已经变成了经典&#xff0c;已经变成了Linux下面的标准&#xff0c;其实它们一直是遵循着Linux的标准。下面就让我们一起看看这些经典的Linux文…

payara 创建 集群_高可用性(HA),会话复制,多VM Payara群集

payara 创建 集群抽象 在研究如何创建高可用性&#xff08;HA&#xff09;时&#xff0c;我发现了会话复制&#xff0c;多机处理的Payara / GlassFish群集&#xff0c;无法在单个参考中找到所需的一切。 我认为这将是一个普遍的需求并且很容易找到。 不幸的是&#xff0c;我的假…

python3连接oracle数据库真操蛋_为64位Windows7的Python3安装MySQLdb

Install 64-bit MySQLdb for Python 3 on Windows 7为64位Windows7的Pyhton3安装MySQLdb原文在此Jesus Rollerblading Christ. It all started as a simple idea: I would install Django and start working on this web app idea I had and use it as a chance to learn more …

每个程序员都应该知道的8个Linux命令

每个程序员&#xff0c;在职业生涯的某个时刻&#xff0c;总会发现自己需要知道一些Linux方面的知识。我并不是说你应该成为一个Linux专家&#xff0c;我的意思是&#xff0c;当面对linux命令行任务时&#xff0c;你应该能很熟练的完成。事实上&#xff0c;学会了下面8个命令&a…

python判断字符串在元祖_Python基础(2)——字典、元祖、字符串方法、非空即真、文件...

目录&#xff1a;一、字典二、元祖三、字符串方法、切片四、非空即真&#xff0c;非0即真五、文件正文一、字典字典d {username:xiaohei,id:1,grand:天马座,addr:北京,age:29}1、增加d {username:xiaohei,id:1,grand:天马座,addr:北京,age:29}#增&#xff1a;2个方法d[money] …

java hotspot 是什么_什么是HotSpot

Java是解释语言&#xff0c;但并不意味着它一定被解释执行。早期的虚拟机确实一条一条指令解释执行&#xff0c;但人们发现这样效率太低&#xff0c;不满足各种要求&#xff0c;因此出现了许多其它虚拟机&#xff0c;如JIT的虚拟机。HotSpot也是类似一种虚拟机&#xff0c;自从…

积分和人民币比率_通过比率路由到旧版和现代应用程序–通过Spring Cloud的Netflix Zuul...

积分和人民币比率从应用程序的旧版本迁移到应用程序的现代化版本时&#xff0c;一个非常常见的要求是能够将用户缓慢迁移到新应用程序。 在本文中&#xff0c;我将介绍通过Spring Cloud使用对Netflix Zuul的支持编写的这种路由层。 在继续之前&#xff0c;我必须承认&#xff0…

Java集合类原理详解

文章目录1 集合框架1.1 集合框架概述1.1.1 容器简介1.1.1 容器的分类1.2 Collection1.2.1 常用方法1.2.2 迭代器1.3 List1.3.1 概述1.3.2 常用方法1.3.3 实现原理1.4 Map1.4.1 概述1.4.2 常用方法1.4.3 Comparable 接口1.4.4 实现原理1.4.5 覆写 hashCode()1.5 Set1.5.1 概述1.…

sql安装联机丛书提示发生网络错误_速达软件:安装问题解答

问题Q&A在安装MSDE数据库时&#xff0c;出现安装程序倒退的情况解决方案&#xff1a;这是以前装过SQL Server数据库或MSDE数据库,没有卸载干净.解决办法重装操作系统。安装MSDE数据库时&#xff0c;系统出现“读取文件C:\program files\Microsoft sql sever\mssql\data\msd…