color=red]1、在switch语句中可以使用字符串类型[/color]
请看下例
public class SwitchSamlpe {
public static void main(String[] args){
SwitchSamlpe.show("man");
SwitchSamlpe.show("\u006d\u0061\u006e");
}
public static void show(String gender){
switch(gender){
case "man":
System.out.println("hi guy");
break;
case "woman":
System.out.println("hi beauty");
break;
default:
System.out.println("hi ");
}
}
}
运行以后会同时打出2个hi guy 可以看出直接用unicode编码会造成很多误会。而这个实现的核心也是把string转化成了对应的哈希值而已。
2、二进制添加新的表述方式
public class LiteralSamlpe {
public static void main(String[] args){
System.out.println(0b10011);
System.out.println(0B10011);
}
}
增加OB以及Ob来表示2进制
3、数值下面可以使用下划线来表示
public class LiteralSamlpe {
public static void main(String[] args){
System.out.println(150_000_000);
}
}
为了好区分增加了下划线来表示以上依然输出150000000
4、java7对异常的处理
先看以下例子
public class ExceptionSample {
@SuppressWarnings("finally")
public static void main(String[] args){
try{
throw new IOException("main exception");
}catch (Exception e) {
throw new RuntimeException(e.getMessage());
}finally{
try {
throw new IOException("sub exception");
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}
}
}
运行以后只能显示sub exception 这一个异常。那是因为在try中的主要异常被后面的finally中的sub异常所覆盖,这样会导致程序员判断出错
java7提供了 addSuppressed 方法来解决这个问题
public class ExceptionSampleJava7 {
public static void main(String[] args) {
RuntimeException e1 = null;
try{
throw new IOException("main exception");
}catch (Exception e) {
e1= new RuntimeException(e.getMessage());
throw e1;
}finally{
try {
throw new IOException("sub exception");
} catch (final IOException e) {
e1.addSuppressed(e);
}
}
}
}
Exception in thread "main" java.lang.RuntimeException: main exception
at com.xxx.java7.ExceptionSampleJava7.main(ExceptionSampleJava7.java:11)
Suppressed: java.io.IOException: sub exception
at com.xxx.java7.ExceptionSampleJava7.main(ExceptionSampleJava7.java:15)
运行以上代码就可以发现不但main异常被没被覆盖 同时也很清楚的记录着被suppressed的异常。
5、java7 允许一个catch捕获多个异常
public class ExceptionSampleJava7 {
public static void main(String[] args) {
try {
throw new IOException("exception");
} catch (IOException | RuntimeException e) {
e.getStackTrace();
}
}
}
这样可以大大减少我们代码的复杂度。但是注意在前面的异常必须小于后面的异常。
6、增加try-with-resources传统的IO操作我们都可以对流进行关闭
如下
public class TryWithSample {
@SuppressWarnings("unused")
private static void read(File source) {
InputStream fis = null;
try {
fis = new FileInputStream(source);
}
catch (Exception e) {
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这样在代码上面十分不美观 而且增加复杂度。
java7 为我们提供这样的书写方式
public class TryWithSample {
@SuppressWarnings("unused")
private static void read(File source) throws IOException {
try(InputStream fis = new FileInputStream(source)) {
}
}
}
这样JAVA会自动关闭在try中申请的管道。。