百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

JAVA拾遗系列之JAVA基础-语法糖

wptr33 2025-03-08 01:00 20 浏览

一、概述

Java语言发展至今,也在不断跟随时代的进步,增加了很多新特性。不过java中的语法糖只存在于编译期, 在编译器将 .java 源文件编译成 .class 字节码时, 会进行解语法糖操作, 还原最原始的基础语法结构。这些语法糖包含条件编译、断言、Switch语句与枚举及字符串结合、可变参数、自动装箱/拆箱、枚举、泛型擦除、增强for循环、lambda表达式、try-with-resources语句、JDK10的局部变量类型推断等等。

二、简述

2.1 条件编译

在if判断中,明显可推断出不成立的代码,在字节码编译的时候,编译器会将不成立的代码删除不进行字节码编译,如:

public void ifCompilerTest() {
    if(false) {
        System.out.println("false if");
    }else {
        System.out.println("true else");
    }
}

2.2 断言

java断言有如下所示的两种形式:

assert condition;这里condition是一个必须为真(true)的表达式。如果表达式的结果为true,那么断言为真,并且无任何行动。如果表达式为false,则断言失败,则会抛出一个AssertionError对象。这个AssertionError继承于Error对象,而Error继承于Throwable,Error是和Exception并列的一个错误对象,通常用于表达系统级运行错误。
asser condition:expr;这里condition是和上面一样的,这个冒号后跟的是一个表达式,通常用于断言失败后的提示信息,说白了,它是一个传到AssertionError构造函数的值,如果断言失败,该值被转化为它对应的字符串,并显示出来。

2.3 Switch语句与枚举及字符串结合

Switch接收的参数支持枚举和字符串,如:

public int switchEnumTest(EnumTest e) {
    switch (e) {
        case FIR:
            return 1;
        case SED:
            return 2;
    }
    return 0;
}


public enum EnumTest {
    FIR,
    SED,
    TRD
}

2.4 可变参数

可变参数指方法接收参数时,可不确定参数个数,但可变参数必须是同一类型,且位于方法参数最后一位。本质上是一个数据,示例如下:

public void varargsTest(String ... arr) {
    for (String s : arr) {
        System.out.println(s);
    }
}

2.5 自动装箱拆箱

自动装箱拆箱主要针对的是基本类型和对应的包装类之间的自动转换,但要注意,自动转换在高并发场景下会影响性能。

public Double autoBoxingTest(Integer i, Double d) {
    return d + i;
}

2.6 枚举

枚举可以固定一系列字符串数据选项,也可以使用枚举来完成单例模式的实现,实例代码如下:

public enum EnumTest {
    FIR,
    SED,
    TRD
}


2.7 泛型擦出

泛型主要用于编译器推导类型,在实际JVM中全部是object类型,这就是泛型的擦除。常见泛型如指定List装载数据的类型,实例如下:

public void genericEraseTest() {
    List list =  new ArrayList();
}

2.8 增强for循环

for循环是开发中最常用的语句,而增强for循环可以更清晰明了的编写循环代码。

List list =  new ArrayList();
for (Object s : list) {
     System.out.println(s);
}

2.9 lambda表达式

lambda涵盖范围比较大,可查阅之前写的《Lambda实践总结》

2.10 try-with-resources语句

在诸如进行数据库连接、IO流创建读取等常见,频繁需要建立连接,释放连接,如果未及时关闭,还可能会导致数据泄露,故Java提供了try-with-resource代码块,由java进行资源的建立和释放,示例代码如下:

try (final StringWriter writer = new StringWriter();
         final StringWriter writer2 = new StringWriter()) {
        writer.write("1");
        writer2.write("2");
}


2.11 JDK10的局部变量类型推断

类型推断有点类似JavaScript的var语句,不用指定类型,由编译器推导类型,示例代码如下:

public void varTest() {
    //初始化局部变量  
    var string = "123";
    //初始化局部变量  
    var stringList = new ArrayList();
    stringList.add("4");
    stringList.add("5");
    stringList.add("6");
    //增强for循环的索引
    for (var s : stringList){
        System.out.println(s);
    }
    //传统for循环的局部变量定义
    for (var i = 0; i < stringList.size(); i++){
        System.out.println(stringList.get(i));
    }
}



相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China&#39;s top diplomat to chair third China-Pacific Island countries foreign ministers&#39; meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...