当前位置: 首页 > news >正文

18个Java语法糖

文章目录

  • 1、什么是语法糖
  • 2、Java中的语法糖
    • 2.1 自动装箱与拆箱
    • 2.2 增强型for循环
    • 2.3 泛型
    • 2.4 可变参数
    • 2.5 try-with-resources
    • 2.6 Lambda表达式
    • 2.7 方法引用
    • 2.8 字符串连接
    • 2.9 Switch表达式
    • 2.10 类型推断
    • 2.11 Optional 类
    • 2.12 Stream API
    • 2.13 接口私有方法
    • 2.14 局部变量类型推断的增强
    • 2.15 模块化系统
    • 2.16 文本块
    • 2.17 记录(Records)
    • 2.18 密封类

1、什么是语法糖

语法糖是一种编程语言设计中的术语,它指的是那些提供更简洁、直观的语法来表示某些操作的特性。这些特性使代码更加容易理解,同时减少了编写样板代码的需要。

2、Java中的语法糖

2.1 自动装箱与拆箱

Java 5引入了自动装箱和拆箱,允许基本数据类型和它们的包装类之间自动转换。

Integer num = 10; // 自动装箱
int n = num; // 自动拆箱

2.2 增强型for循环

也称为for-each循环,用于简化数组或集合的遍历。

int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {System.out.println(number);
}

2.3 泛型

提供了类型安全的检查,并消除了类型转换的需要。

List<String> list = new ArrayList<>();
list.add("Hello");
String s = list.get(0); // 无需类型转换

2.4 可变参数

允许方法接收任意数量的参数。

public void printNumbers(int... numbers) {for (int number : numbers) {System.out.println(number);}
}
printNumbers(1, 2, 3, 4, 5);

2.5 try-with-resources

自动管理资源的关闭,适用于实现了AutoCloseable接口的资源。

try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {System.out.println(br.readLine());
} catch (IOException e) {e.printStackTrace();
}

2.6 Lambda表达式

Java 8引入,简化了函数式接口的实现。

List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));

2.7 方法引用

Lambda表达式的简化形式,直接引用已有方法。

list.forEach(System.out::println);

2.8 字符串连接

Java 5开始,字符串连接被优化为StringBuilder操作。

String message = "Hello, " + "world!";

2.9 Switch表达式

Java 12引入,使switch语句更加简洁和灵活。

int day = 5;
String dayName = switch (day) {case 1 -> "Sunday";case 2 -> "Monday";// ...default -> "Invalid day";
};

2.10 类型推断

Java 10引入,允许使用var关键字声明变量,编译器自动推断类型。

var list = new ArrayList<String>(); list.add("Hello");

2.11 Optional 类

Java 8 引入了 Optional类,旨在提供一种更清晰、更安全的方式来处理可能为空的对象。这避免了显式的 null检查,减少了空指针异常的风险。

Optional<String> optional = Optional.ofNullable(getString());
optional.ifPresent(System.out::println);

2.12 Stream API

Java 8 引入的 Stream API为集合提供了一种声明式的处理方式,支持对集合进行复杂的查询和操作,如过滤、排序、聚合等。

List<String> strings = Arrays.asList("a", "b", "c");
strings.stream().filter(s -> s.startsWith("a")).sorted().forEach(System.out::println);

2.13 接口私有方法

Java 9 允许在接口中定义私有方法,这使得接口可以提供默认方法的实现,同时保持接口的简洁性。

public interface MyInterface {default void defaultMethod() {privateMethod();}private void privateMethod() {System.out.println("Private method in interface");}
}

2.14 局部变量类型推断的增强

Java 10 进一步增强了局部变量类型推断,引入了var 关键字,允许在lambda表达式中使用,使得代码更加简洁。

var list = new ArrayList<>();
list.add("Hello");
list.forEach((s) -> System.out.println(s));

2.15 模块化系统

Java 9 引入了模块化系统(Jigsaw 项目),允许将 Java 应用程序分割成更小、更易于管理的部分。这有助于提高代码的可维护性和安全性。

module mymodule {exports com.gengby.myapp;
}

2.16 文本块

Java 15 引入了文本块(Text Blocks),这是一种多行字符串字面量,可以跨越多行而不需要转义。

String html = """<html><body><p>Hello, World!</p></body></html>""";

2.17 记录(Records)

Java 16 引入了记录(Records),这是一种特殊的类,用于存储不可变的数据。记录提供了一种简洁的方式来创建不可变的数据载体。

record Point(int x, int y) {}Point p = new Point(3, 4);
System.out.println(p);

2.18 密封类

Java 16 预览版引入了密封类(Sealed Classes),这是一种限制类继承的方式,可以提高代码的安全性和可预测性。

sealed class Shape permits Circle, Rectangle, Square {// ...
}final class Circle extends Shape {// ...
}

这些语法糖特性使得Java代码更加简洁和易读,但它们并不增加语言本身的功能,只是对已有功能的一种简化和封装。Java 语言不断演进,引入了许多语法糖和新特性,以提高开发效率、代码质量和应用程序的性能。


http://www.mrgr.cn/news/40959.html

相关文章:

  • C++入门基础知识95——【关于C++ 自增自减运算符】
  • Golang | Leetcode Golang题解之第451题根据字符出现频率排序
  • 分布式共识算法ZAB
  • C++继承的三种方式[ACCESS]
  • AI学习指南深度学习篇-权重正则化的基本原理
  • 在C语言中,符号有两个主要用途:
  • 水污染水质检测数据集 2400张 水污染 带标注 voc yolo 4类
  • Linux 磁盘管理
  • 【架构】prometheus+grafana系统监控
  • Python | Leetcode Python题解之第450题删除二叉搜索树中的节点
  • C++网络编程之IP地址和端口
  • 实战OpenCV之轮廓检测
  • SQL Server—表格详解
  • SpringBoot开发——Spring Security中获取当前登录用户信息的方式
  • 读数据湖仓04数据架构与数据工程
  • CountDownLatch、CyclicBarrier、Semaphore等并发工具类的使用。JVM内存区域划分(堆、栈、方法区、程序计数器、本地方法栈)。
  • 某大型公园定岗定编项目成功案例纪实
  • 【架构】efk日志监控
  • 开放式耳机是什么意思?哪个品牌好?开放式蓝牙耳机测评分享
  • WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!