Java中的语法糖

语法糖的定义:语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,并没有给语言添加什么新东西,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。(也可以认为语法糖就是把一段复杂的代码简化成更精简的代码)

在这里就介绍java中几个常用的语法糖:

1.foreach

foreach又被叫做增强for循环,常被用于替换一般的for (int i = 0; i < ; i++),这样形式的循环,应用场景是当使用者不关注循环中的i值时。

下面是demo:

for (String temp : args) {

//doSomething

}

List list = new LinkedList<>();

for (String temp : list) {

//doSomething

}

编译后:

String[] var1 = args;

int var2 = args.length;

for(int var3 = 0; var3 < var2; ++var3) {

String var10000 = var1[var3];

}

List list = new LinkedList();

String var7;

for(Iterator var6 = list.iterator(); var6.hasNext(); var7 = (String)var6.next()) {

;

}

可以看到foreach 在在处理数组和集合类时候会被编译成两种不同的形式。其中遍历集合时,是使用迭代器(iterator) ,这也解释了为什么foreach不能在循环内部移除成员。

2.泛型

java中泛型也是一种语法糖。又被叫做伪泛型,编译后Class文件类型就变成原生类型(类型擦除),而在引用处插入强制类型转换以实现JVM对泛型的支持。

demo:

List list = new LinkedList<>();

list.add("a");

String a = list.get(0);

编译后:

List list = new LinkedList();

list.add("a");

String a = (String)list.get(0);

3.switch-case语法支持枚举类和String类

这里就简单以String为例子,其实enum也是类似的,感兴趣的同学可以自己写个demo查看编译后的结果。

demo:

switch (animal) {

case "cat":

//doSomething

break;

case "dog":

//doSomething

break;

case "fish":

//doSomething

break;

default:

break;

}

编译后:

byte var3 = -1;

switch(animal.hashCode()) {

case 98262:

if (animal.equals("cat")) {

var3 = 0;

}

break;

case 99644:

if (animal.equals("dog")) {

var3 = 1;

}

break;

case 3143256:

if (animal.equals("fish")) {

var3 = 2;

}

}

switch(var3) {

case 0:

case 1:

case 2:

default:

}

在jdk7前,switch只支持short,char,int,byte(或者他们的包装类)和enum类型,在jdk7之后加入了String。编译之后,其实是通过String的hascode值来作为switch的值,再进行String的equal判断加强准确性(因为不同hashcode可能相同)。

4.try-with-resources

在Java中,如果打开了外部资源(文件、数据库连接、网络连接等),必须在这些外部资源使用完毕后手动关闭它们,否则导致外部资源泄露。在实际coding中我们常常会去些很多try-catch-finally的语句来确保自己关闭了这些资源。try-with-resources也是jdk7之后新加的语法,他旨在使之关闭资源的代码更优雅且可读。前提是资源类要实现java.lang.AutoCloseable或者java.io.Closable接口。

demo:

try (FileInputStream fin = new FileInputStream("C:\\test.log")) {

//doSomething

fin.read();

} catch (Exception e) {

e.printStackTrace();

}

编译后:

try {

FileInputStream fin = new FileInputStream("C:\\test.log");

Throwable var2 = null;

try {

fin.read();

} catch (Throwable var12) {

var2 = var12;

throw var12;

} finally {

if (fin != null) {

if (var2 != null) {

try {

fin.close();

} catch (Throwable var11) {

var2.addSuppressed(var11);

}

} else {

fin.close();

}

}

}

} catch (Exception var14) {

var14.printStackTrace();

}

编译后其实代码与传统方式的try-catch-finally十分相似,但是这种写法避免了手动去写close资源的代码,使代码更简洁。

java 语法糖 字符串,java中的一些语法糖相关推荐

  1. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  2. Java 11:字符串类中的新方法

    Java 11 doesn't have a lot of language specific features. So, it was surprising to see 6 new methods ...

  3. java分割子字符串,Java 字符串分割截取的方法 (substring,split,StringTokenizer,indexOf,lastIndexOf)...

    需求,把"01:大汽车",分成01和大汽车 有两种做法:一是substring package test; public class substringTest { public ...

  4. java stringbuilder 替换字符串_java中的经典问题StringBuilder替换String

    遇到一个面试题:在下面的例子中用"+"运算符连接字符串与用StringBuilder对象的append方法连接字符串哪个性能比较优异. 下图是给出的例子,例一,使用"+& ...

  5. java有什么字符串_Java 中操作字符串都有哪些类?它们之间有什么区别

    1. String.StringBuffer.StringBuilder 原文出自<编写高质量代码:改善 Java 程序的 151 个建议> CharSequence 接口有三个实现类与字 ...

  6. java indexof 子字符串_Java中字符串中子串的查找共有四种方法(indexof())

    Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此 ...

  7. java如何输入字符串_JAVA中怎样输入字符串

    https://zhidao.baidu.com/question/344967589.html java.lang.String.charAt() 方法返回指定索引处的char值.http://ww ...

  8. Java json拼接字符串_Java中拼接json格式字符串

    如果需要表示的是name-value格式的, 在Java文件中的代码如下: @Override protected void doPost(HttpServletRequest req, HttpSe ...

  9. java sql拼接字符串_SQL中字符串拼接

    1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性. sqlserver: select '123'+'456' ...

最新文章

  1. JavaScript学习笔记—— 4. 变量、作用域和内存问题
  2. ionic app 开发和生产环境的配置
  3. 深度学习100问:图像语义分割有哪些经典的上采样方法?
  4. Linux下一些操作命令
  5. class中一个小技巧
  6. 博通的“交钥匙”策略
  7. html visibility 替代服务器端控件 visable属性!
  8. 字典树实现_学习NLP的第3天——字典树
  9. 学安全工程用不用计算机,上重点大学的末流专业,不如上普通大学的重点专业,你赞成吗?...
  10. 86. php 绘图体系(2)
  11. Leetcode之通配符匹配
  12. mysql主从同步 忽略库_主从复制中忽略库的参数
  13. 新一期,微信免费领7天WPS稻壳会员活动!
  14. ir2104s的自举电容_有关IR2104的自举电容和NMOS选择问题要点.docx
  15. Todesk一直显示正在连接本地连接
  16. 【VSCode】设置代码格式化插件Beautify
  17. web安全:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧
  18. 微信小程序的特点、开发能力及运行机制
  19. EPICS记录参考2--EPICS过程数据库概念
  20. 花1299美元购买一款基于云端的笔记本值吗?且看Chromebook Pixel与微软Surface Pro和MacBook Air的对比

热门文章

  1. windows 10下 itunes 备份默认存储路径问题
  2. 如何判断两个数是否互质
  3. 水果店水果处理方案,水果店不新鲜怎么处理
  4. 心碎了没有人说自己是无所谓的
  5. java 反射调用get方法_Java通过PropertyDescriptor反射调用set和get方法
  6. Jmeter接口及性能报告监控插件
  7. 名画93 马远《水图卷》
  8. Attempted to serialize java.lang.Class Forgot to register a type adapte
  9. 编程日记130121
  10. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java双笙映画ou5oj