蓝桥杯
比赛环境
- 使用 jdk-8u261-windows-x64
- 使用 eclipse-java-2020-06-R-win32-x86_64
- 提供 API 文档(英文)
文档
注意事项
- 主类名必须是
Main
- 不能使用
package
语句
Java 版本差异
由于蓝桥杯 还在 使用 Java 8,以下介绍一些刷题时很好用但 Java 8 中还不存在的特性。
各版本新特性概览
- Java 9 新特性概览 | JavaGuide(Java面试+学习指南)
- Java 10 新特性概览 | JavaGuide(Java面试+学习指南)
- Java 11 新特性概览 | JavaGuide(Java面试+学习指南)
- Java 12~13 新特性概览 | JavaGuide(Java面试+学习指南)
- Java 14 新特性概览 | JavaGuide(Java面试+学习指南)
- Java 15 新特性概览 | JavaGuide(Java面试+学习指南)
- Java 16 新特性概览 | JavaGuide(Java面试+学习指南)
- Java 17 新特性概览 | JavaGuide(Java面试+学习指南)
- Java 18 新特性概览 | JavaGuide(Java面试+学习指南)
- Java 19 新特性概览 | JavaGuide(Java面试+学习指南)
不支持局部变量类型推断(var
)
这是 Java10 的新特性。 可参考:Java 10 新特性之局部变量类型推断 - 知乎
不支持 record
可参考:无涯教程- Java 14 – Record类型介绍 - 知乎
不支持一些 String
方法
Java11 增加了一系列的字符串处理方法:
//判断字符串是否为空
" ".isBlank(); //true
//去除字符串首尾空格
" Java ".strip(); // "Java"
//去除字符串首部空格
" Java ".stripLeading(); // "Java "
//去除 字符串尾部空格
" Java ".stripTrailing(); // " Java"
//重复字符串多少次
"Java".repeat(3); // "JavaJavaJava"
//返回由行终止符分隔的字符串集合。
"A\nB\nC".lines().count(); // 3
"A\nB\nC".lines().collect(Collectors.toList());
不支持 Lambda switch
传统的 switch 语法存在容易漏写 break 的问题,而且从代码整洁性层面来看,多个 break 本质也是一种重复。
Java12 增强了 switch 表达式,使用类似 lambda 语法条件匹配成功后的执行块,不需要多写 break 。
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
Java14 正式支持了此特性。
不支持文本块
文本块解决了 Java 定义多行字符串时只能通过换行转义或者换行连接符来变通支持的问题,引入 三重双引号 来定义多行文本。
Java 13 支持两个 """
符号中间的任何内容都会被解释为字符串的一部分,包括换行符。
未支持文本块之前的 Json 写法:
String json ="{\n" +
" \"name\":\"mkyong\",\n" +
" \"age\":38\n" +
"}\n";
支持文本块之后的 Json 写法:
String json = """
{
"name":"mkyong",
"age":38
}
""";
未支持文本块之前的 SQL 写法:
String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" +
"WHERE `CITY` = 'INDIANAPOLIS'\n" +
"ORDER BY `EMP_ID`, `LAST_NAME`;\n";
支持文本块之后的 SQL 写法:
String query = """
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = 'INDIANAPOLIS'
ORDER BY `EMP_ID`, `LAST_NAME`;
""";
另外,String
类新增加了 3 个新的方法来操作文本块:
formatted(Object... args)
:它类似于String
的format()
方法。添加它是为了支持文本块的格式设置。stripIndent()
:用于去除文本块中每一行开头和结尾的空格。translateEscapes()
:转义序列如 “\\t” 转换为 “\t”
由于文本块是一项预览功能,可以在未来版本中删除,因此这些新方法被标记为弃 用。
@Deprecated(forRemoval=true, since="13")
public String stripIndent() {
}
@Deprecated(forRemoval=true, since="13")
public String formatted(Object... args) {
}
@Deprecated(forRemoval=true, since="13")
public String translateEscapes() {
}
Java15 正式支持了此特性。