Java 7有啥新特性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 7有啥新特性?相关的知识,希望对你有一定的参考价值。

几乎方方面面都有重大更新,举几个语法上的新特性,其他方面建议你去查找相关资料。
1、switch...case支持字符串。
2、数字字面量改进,加入二进制字面量表示:如0b001001(十进制数字9)或0B001001;
数字字面量中可以使用下划线分割,以使长数字便于阅读,如100000可以写成100_000,就好比现实生活中写成100,000便于阅读一样。
3、优化异常处理,Throable类增加addSuppressed和getSuppressed方法,用来记录被其他异常抑制而无法正常抛出的异常;
一个catch子句可以捕获多个异常,每个异常之间使用“|”分割,如catch (ClassNotFoundException cnfe | IOException ioe);
还有其他的一些优化,如异常类中包含更多信息,精确异常抛出等等。
4、Java 7之前通常在try里创建资源,finally里对资源进行关闭等操作,Java 7中可以使用try-with-resources语句,而不需要关心资源的关闭,如——
try (InputStream input = new FileInputStream("D:/test1.txt");
OutputStream output = new FileOutputStream("D:/test2.txt"))
byte[] buffer = new byte[1024];
int len = -1;
while ((len = input.read(buffer) != -1 )
output.write(buffer, 0, len);


将资源的创建写在try后的括号里,这样就不需要使用finally语句来保证资源的正确关闭,由虚拟机自动完成,程序员只需要关心业务逻辑即可。
5、关于变长参数的优化,增加了@SafeVarargs注解,Java 7之前在使用可变长参数的方法时,如果参数传递的是不可具体化的类型(如泛型类型List<String>)会产生警告信息,如果希望进制该警告,需要使用@SuppressWarnings("unchecked")注解进行声明,Java 7中,如果开发人员确信某个使用了可变长参数的方法在与泛型类一起使用时不会出现类型安全问题,就可以使用@SafeVarargs注解来声明。注意该注解只能用于可变长参数的方法或者构造方法,并且方法必须声明为static或final。
参考技术A Modularization 模块化– JSR 294 或者 Project Jigsaw
JVM 对动态语言的支持
更多新的 I/O APIs 即将完成,包括真正的异步I/O 和最终的真实的文件系统 file system API – JSR 203
对XML本地语言支持. (可能的probable)
Safe rethrow – 允许catch捕获语句让编译器更加聪明的知道基于什么情况下重新throw什么内容。
Null dereference expressions – Null 和 ‘?’ syntax 比较,语法类似 Groovy… 让开发者避免过多的空值验证。
更好的类型推断 Better type inference
多重捕获Multi-catch
JSR 296 – Swing 应用框架 application framework – 这方面需要更简单和简洁。
  “小的”sun方面的修改有:
升级的类加载class loader 架构;
XRender pipeline for Java 2D:是Open JDK ntegrators Challenge project项目;
Swing 更新 – JXLayer, DatePicker, CSS styling 等;
JavaFX
  sun方面“快速”的修改,主要是性能更新:
  * 并发方面的细微调整 concurrency tweaks (JSR 166),更好的支持Multicore
  * G1 垃圾收集器Garbage collector - 带来更小的中断时间,有希望替代 CMS (Concurrent mark sweep) GC
  * 64 bit VM的压缩指针Compressed pointer
  * MVM-lite – 多个虚拟机能够独立运行应用和允许用kill -9杀死java应用。
还有更详细的介绍,不过太多了。

Java 字符串


章节


Java字符串/String

字符串用于存储文本。

一个字符串变量包含了一组由双引号括起来的字符:

示例

创建一个String类型的变量,并为其赋值:

String greeting = "Hello";

字符串长度

Java中的字符串实际上是一个对象,字符串对象包含了一组操作字符串的方法。例如,可以使用length()方法获取字符串长度:

示例

String txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.println("字符串长度是: " + txt.length());

更多字符串方法

有很多字符串方法可用,例如toUpperCase()toLowerCase():

示例

String txt = "Hello World";
System.out.println(txt.toUpperCase());   // 输出 "HELLO WORLD"
System.out.println(txt.toLowerCase());   // 输出 "hello world"

在字符串中查找字符串

indexOf()方法在字符串中查找字符串,返回被查找字符串首次出现的索引(位置):

示例

String txt = "奇客谷教程 - Java 教程";
System.out.println(txt.indexOf("Java")); // 输出 8

Java从0开始计算位置。

0是字符串中的第一个位置,1是第二个,2是第三个…

字符串拼接

可以使用+运算符拼接两个字符串:

示例

String firstName = "Kevin";
String lastName = "Wu";
System.out.println(firstName + " " + lastName);

注意,在firstNamelastName之间,我们添加了一个空格。

还可以使用concat()方法拼接两个字符串:

示例

String firstName = "Kevin ";
String lastName = "Wu";
System.out.println(firstName.concat(lastName));

特殊字符

因为字符串必须用引号括起来,如果字符串中含有引号,Java会报错:

String txt = "关于西湖的诗句: "毕竟西湖六月中,风光不与四时同"";

要避免这个问题,可以使用反斜杠转义字符。

反斜杠()转义字符将特殊字符转换为字符串字符:

转义字符 结果 描述
单引号
" " 双引号
\ 反斜杠

"在字符串中插入双引号:

示例

String txt = "关于西湖的诗句: "毕竟西湖六月中,风光不与四时同"";

在字符串中插入单引号:

示例

String txt = "It's OK.";

\在字符串中插入一个反斜杠:

示例

String txt = "字符 \ 称为反斜杠.";

Java中,还有几个转义组合:

转义字符 结果
换行
回车
制表符
 退格
f 换页

数字相加和字符串拼接

警告: Java中,加法和字符串拼接都是用`+`运算符,2个数字相加是值相加,2个字符串相加是字符串拼接。

两个数字相加,结果将是一个数字:

示例

int x = 10;
int y = 20;
int z = x + y;      // z 将是 30 (一个整型值)

两个字符串相加,结果将是拼接后的一个字符串:

示例

String x = "10";
String y = "20";
String z = x + y;   // z 将是 1020 (一个字符串)

如果数字和字符串相加,会作为字符串拼接处理,结果将是一个字符串:

示例

String x = "10";
int y = 20;
String z = x + y;   // z 将是  1020 (一个字符串)

完整的字符串引用

有关字符串方法的完整引用,请转到我们的Java字符串方法引用。

该引用包含所有字符串方法的描述和示例

以上是关于Java 7有啥新特性?的主要内容,如果未能解决你的问题,请参考以下文章

TS16949第四版有啥新变化?

python-is-python-2 包...有啥新东西吗?

在 Android WebView 中自动播放嵌入的 YouTube 视频有啥新技巧吗?

Codeigniter 3有啥新玩意

Java8新特性lambda表达式有啥用

小笔记 - Swift 有啥新东西