Java中的语法糖(真甜)

news2024/12/23 5:42:47

什么是语法糖(Syntactic sugar)

语法糖是一个计算机数据,特指在编程语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。

糖嘛,对应的词汇就是甜。而语法糖就是让你的代码更甜🐶。

实际上就像上面介绍的,如果可以将语句中的一些构造从语句中删除而不影响语言的功能,那么它就是语法糖。

Java中常见的语法糖

复合赋值运算符是赋值运算符的语法糖

x += 1 对应 x = x + 1 
x -= 1 对应 x = x - 1
复制代码

递增/递减运算符是复合赋值运算符的语法糖

x++ 代替 x += 1 
x-- 代替 x -= 1
复制代码

三元运算符是If-then-else语句的语法糖

(条件?满足:否则)
复制代码

增强型 For 循环是 For 循环的语法糖,带有一个迭代器

for (String str:arrayList) {
  
}
复制代码

上面的增强for循环是下面带有迭代器的 for 循环的语法糖

for (Iterator<String> it = arrayList.iterator(); it.hasNext();) {
  String str = it.next();
  // Implementation logic
}
复制代码

划重点

去糖化

语言处理器,包括编译器和静态分析器,通常在处理之前将糖化结构扩展为更基本的结构,这个过程有时称为“去糖化”。例如,增强的 for 循环将在编译时被取消为带有迭代器的 for 循环。

语法糖和运行时异常

重要的是要了解糖化和去糖化,因为糖化结构会根据其去糖化结构引发某些运行时异常。

举个例子:

大家都知道不能在增强for循环中进行集合的增删操作,否则会抛异常。

是因为增强的 For 循环在迭代Collection 时,使用Collection remove()方法从 Collection 中删除元素时抛出java.util.ConcurrentModificationException 。

虽然在迭代集合时从集合中移除元素(使用集合 remove() 方法)时,带有计数器的通用 for 循环不会抛出java.util.ConcurrentModificationException 。

这是因为在编译时,增强的 for 循环被去糖化,转换成具有Fail-fast 迭代器的通用 for 循环。

Fail-fast 迭代器在迭代Collection 时从 Collection 中移除元素(使用Collection remove() 方法)时抛出java.util.ConcurrentModificationException。

再聊点有趣的:语法盐(syntactic salt)

语法盐是指为了降低开发者写出不良代码的设计。举个简单例子,在C语言和C++的Switch中,如果case语句不加break,编译器并不会产生错误信息。还有一些程序员认为定义变量类型也是语法盐的一种。

再举个例子,在Java当中,不允许将float类型的变量赋值给定义为int类型的变量,但是在C或者C++当中,会自动把float类型的变量舍去小数并赋值给int类型的变量。

int num1;
float pi=3.14159;
num1=pi;  //賦值錯誤
复制代码

语法盐有可能会违背它的初衷,使代码的可读性降低或浪费代码的空间占用。在极端条件下,真正有用的代码可能要比为了满足语法盐要求而增加的代码还要短。

另外一种替代语法盐的方法是在代码可能产生错误时,让编译器产生警告——这也是C和C++的编译器常见的作法。

 

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

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

相关文章

08.DashBoard流监控配置

08.DashBoard流监控配置 每个服务提供者都需要实现actuator&#xff0c;才可以实现流量监控。 导入Maven依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId><…

【图像去噪】空域+频域滤波图像去噪【含GUI Matlab源码 914期】

⛄一、获取代码方式 获取代码方式1&#xff1a; 完整代码已上传我的资源&#xff1a;【图像去噪】基于matlab GUI空域频域滤波图像去噪【含Matlab源码 914期】 获取代码方式2&#xff1a; 通过订阅紫极神光博客付费专栏&#xff0c;凭支付凭证&#xff0c;私信博主&#xff0…

移动端防抓包实践

目录介绍 01.整体概述介绍 1.1 项目背景1.2 思考问题1.3 设计目标1.4 收益分析 02.市面抓包的分析 2.1 Https三要素2.2 抓包核心原理2.3 搞定CA证书2.4 突破CA证书校验2.5 如何搞定加解密2.6 Charles原理2.7 抓包原理图2.8 抓包核心流程 03.防止抓包思路 3.1 先看如何抓包3.2 …

C++计算机视觉库OpenCV在Visual Studio 2022的配置方法

本文介绍在Visual Studio 2022中配置、编译C 计算机视觉库OpenCV的方法。 1 OpenCV库配置 首先&#xff0c;我们进行OpenCV库的下载与安装。作为一个开源的库&#xff0c;我们直接在其官方下载网站&#xff08;https://opencv.org/releases/&#xff09;中进行下载即可&#x…

实现无入侵式C++代码mock工具

为了实现真正无侵入式的mock&#xff0c;我们基于开源Hook框架Frida-gum提供的API&#xff0c;利用C模板进行封装&#xff0c;作者编写了一个简单实用的mock工具&#xff0c;在此开源分享&#xff08;代码详见附录&#xff09;。背景在单元测试中&#xff0c;往往需要减少被测函…

如何实现高性能网络编程-ChatGPT怎么看

hi ,大家好&#xff0c;我是大师兄。听说最近chatgpt特别火&#xff0c;那我们邀请一下chatgpt如何实现&#xff1a;我们先来小试牛刀&#xff1a;刚开始用先用英文交流一下&#xff0c;然后试一下中文&#xff1a;元芳你怎么看&#xff1f;下期直播主题--网络编程 (如何实现高…

用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (7)- 用状态机实现红绿灯

AWPLC 目前还处于开发阶段的早期&#xff0c;写这个系列文章的目的&#xff0c;除了用来验证目前所做的工作外&#xff0c;还希望得到大家的指点和反馈。如果您有任何疑问和建议&#xff0c;请在评论区留言。 1. 背景 AWTK 全称 Toolkit AnyWhere&#xff0c;是 ZLG 开发的开源…

kaggle实战:基于超市消费数据的用户个性化分析案例

大家好&#xff0c;今天给大家分享一篇 kaggle 数据集的新文章&#xff1a;基于一份超市消费数据集的用户个性化分析以及用户分群的实现。 更多详细内容参考原数据集地址&#xff1a; https://www.kaggle.com/code/sonalisingh1411/customer-personality-analysis-segmentati…

实验八 网络优化与正则化(3)不同优化算法比较

目录7.3 不同优化算法的比较分析7.3.1 优化算法的实验设定7.3.1.1 2D可视化实验7.3.1.2 简单拟合实验7.3.1.3 与Torch API对比&#xff0c;验证正确性7.3.2 学习率调整7.3.2.1 AdaGrad算法7.3.2.2 RMSprop算法7.3.3 梯度估计修正7.3.3.1 动量法7.3.3.2 Adam算法7.3.4 不同优化器…

java基于Springboot的简历系统-计算机毕业设计

项目介绍 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;简历系统当然也不能排除在外。简历系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;…

SAP ABAP CDS view Association 引入的缘由

ABAP CDS view 支持三种 join 方式&#xff1a; Inner JoinLeft Outer joinRight outer join 我们使用 ABAP Development Tool 的 CDS view 向导创建一个 CDS view&#xff1a; 向导里包含的 $ 和大括号就是占位符&#xff0c;需要开发人员自己指定&#xff1a; 我们把占位符…

奇舞周刊475期:2022年 CSS 生态圈技术趋势!

记得点击文章末尾的“ 阅读原文 ”查看哟~下面先一起看下本期周刊 摘要 吧~奇舞推荐■ ■ ■2022年 CSS 生态圈技术趋势&#xff01;一年一度的 State of CSS 调查结果正式公布&#xff01;通过本文看看2022年 CSS 生态圈的技术趋势&#xff01;React Streaming SSR 原理解析Re…

BI技巧丨RANKX浮点运算

RANKX这个函数&#xff0c;白茶之前已经写过很多期了&#xff0c;本期是对RANKX函数一个细节问题的补充。 我们常见的数据类型有很多&#xff0c;用来聚合的主要有三种数据类型&#xff1a;文本、整数、小数。 在大部分场合&#xff0c;小数是实际FACT数据中最为常见的数据类…

[1180]clickhouse查看数据库和表的容量大小

文章目录1.查看数据库容量、行数、压缩率2.查看数据表容量、行数、压缩率3.查看数据表分区信息4.查看数据表字段的信息5. 查看表的各个指标6.跟踪分区7.检查数据大小在mysql中information_schema这个数据库中保存了mysql服务器所有数据库的信息&#xff0c; 而在clickhouse&…

[附源码]Python计算机毕业设计SSM基于健身房管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java 变量作用域、构造方法官方教程

一、变量作用域 Java 中的变量有3种: &#x1f4d6; ① 全局变量&#xff1a;被定义在类中&#xff08;成员变量&#xff09; &#x1f4d6; ② 局部变量&#xff1a;被定义在成员方法、代码块、静态代码块中定义的变量 &#x1f4d6; ③ 参数&#xff1a;方法声明中的变量 T…

1.Spring简介

1.概念 Spring是一个免费开源框架&#xff0c;为了简化企业级项目开发&#xff0c;提供全面的开发部署解决方案。 2.体系结构 Data Access/Integeration是Spring对数据持久层的支持&#xff0c;SpringDataJpa就是其中的一种。Web是Spring对表现层处理的支持&#xff0c;Spir…

Springboot多环境开发

文章目录一. 前言二. 单文件版多环境配置三. 多文件版多环境配置四. 多环境开发配置技巧五. 多环境配置分组管理一. 前言 在日常开发中我们使用的环境可能会不一样&#xff0c;比如开发环境&#xff0c;测试环境&#xff0c;生产环境&#xff0c;那么这些环境对应的配置也会不…

【计算机视觉】数据获取、数据标注、数据增强的概念简介

觉得有帮助麻烦点赞关注收藏~~~ 基于深度学习的视频分析算法是依赖于数据训练的&#xff0c;数据是深度学习的主要原料&#xff0c;对于算法性能的提升是非常重要的。本章将重点介绍数据的获取、标注、增强及处理方法。 一、数据获取 训练数据的来源主要包括网上公开数据库和…

Redis实现短信登录

文章目录一、基于Session实现登录二、基于Redis实现共享Session实现登录一、基于Session实现登录 ---------------------------------------------------Controller PostMapping("code") public Result sendCode(RequestParam("phone") String phone, Http…