第1章 初识Java7

第1章 初识Java 7

本章内容:
  • Java 既是编程语言, 也是平台 
  • 语法变一点, 能力强好多 
  • try-with-resources语句 
  • multi-catch提升异常处理能力
1.1 语言与平台
Java语言: Java语言是静态类型, 面向对象的语言. 它是人类可读的.
Java平台: 平台是提供运行时环境的软件. Java虚拟机(JVM)负责把类文件形式(人类不可读)的代码链接起来并执行. JVM不能直接解释Java语言的源文件, 你要先把源文件转换成类文件.
图1-1 Java源码被转换成.class文件, 在JIT编译前被加载处理
 
1.2 Coin项目: 浓缩的都是精华
创建Coin项目是为了反映Java语言中的微小变动. 项目的名字是个双关语--像硬币一样小的变化(small change comes as coins), 而"套用一句老话(to coin a phrase)指的是给Java,语言添加一个新的表达方式.
在技术圈子里, 这种文字游戏, 奇思妙想和躲不掉的恐怖双关语随处可见. 你可能已经对此已经习以为常了.
 
1.3 Coin项目中的修改
1.3.1 switch语句中的String
在Java6及之前, case语句中的常量只能是byte, char, short或int(也可以是对应的封装类型Byte, Character, Short和Integer)或枚举常量.
Java7规范中增加了String, 毕竟它也是常量类型.
1.3.2 更强的数值文本表示法
数字常量(如基本类型中的Integer)可以用二进制文本表示
在整型常量中可以使用下划线来提高可读性
1. 二进制文本
// 让int x用位模式表示十进制值102
int x = Integer.parseInt("1100110", 2);
// in Java 7
int x = 0b1100110;
2. 数字中的下划线
long anotherLong = 2_147_483_648L
int bitPattern = 0b0001_1100_0011_0010_1011_1010_0011
1.3.3 改善后的异常处理
异常处理有两处改进, multicatch 和 final 重抛.
代码清单1-1 在Java6中处理不同的异常
代码清单1-2 在Java7中处理不同的异常
try{
doSomethingWhichMightThrowIOException();
doSomethingElseWhichMightThrowSQLException();
} catch(final Exception e){  // 在Java 7中, 可以添加final
...
throw e
}
 
关键字final表明实际抛出的异常就是运行时遇到的异常--在上面的代码中就是IOException或SQLException. 这被称为 final重抛 , 这样就不会抛出笼统的异常类型, 从而避免在上层只能用笼统的catch捕获.
1.3.4 try-with-resources (TWR)
其基本设想是把资源(比如文件或类似的东西)的作用域限定在代码块内, 当程序离开这个代码块时, 资源会被自动关闭.
这是一项非常重要的改进, 因为没人能在手动关闭资源时做到100%正确.
代码清单1-3 Java 6中的资源管理语法
代码清单1-4 Java7中的资源管理语法
这是资源自动化管理代码块的基本形式--把资源放在try的圆括号内.  在这段代码块中使用的资源在处理完成后会自动关闭.
要确保try-with-resources生效, 正确的做法是为各个资源声明独立的变量.
try( FileInputStream fin = new FileInputStream("someFile.bin");
    ObjectInputStream oin = new ObjectInputStream(fin) ){
...
}
而不是
try( ObjectInputStream in = new ObjectInputStream(new FileInputStream("someFile.bin")) ) {
...
}
TWR与AutoCloseable
目前TWR特性依靠一个新定义的接口实现AutoCloseable. TWR的try从句中出现的资源类都必须实现这个接口. Java7平台中的大多数资源类都被修改过, 已经实现了AutoCloseable接口.
Java7中还定义了其父接口. 但并不是全部资源相关的类都采用了这项新技术. 不过, JDBC4.1已经具备了这个特性.
然而在你自己的代码里, 在需要处理资源时, 一定要使用TWR, 从而避免在异常处理时出现bug.
希望你尽快使用try-with-resources, 把那些多余的bug 从代码库中赶走.
1.3.5 钻石语法(Improved Type Inference for Generic Instance Creation)
为泛型实例创建而做出的类型推断改进
Map<Integer, Map<String, String>> userLists = new HashMap<>();
// 而不必  Map<Integer, Map<String, String>> userLists = new HashMap<Integer, Map<String, String>>();
1.3.6 简化变参方法调用
 
语法糖(比如Java7中数字中的下划线)是描述一种语言特性的短语. 它表示这是冗余的语法--在语言中已经存在一种表示形式了--但语法糖用起来更便捷.
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值