Java 5.0 的新特性

2004年下半年,Sun公司发布了开发代号为“Tiger”的J2SE 5.0,揭开了Java发展的一个重要里程碑。在过去的Java升级中更多的是进行一些库函数的改进,而这次则直接从语法层面上进行了增强。直接从1.4跳到5.0Sun本来是打算用1.5.0这个版本号的),到底有什么改变呢.


1. Metadata (元数据)
能让你在程序中嵌入注解(annotation),这些注解就可以被不同的编程工具处理,生成java 源代码. 因此只需要指定一种动作.实际的事情留给工具来处理.

sample
Before

public interface PingIF extends Remote {
public void ping() throws RemoteException;
}
public class Ping implements PingIF {
public void ping() {
}
}

After

public class Ping {
public @remote void ping() {
}
}

java5.0 中提供了一个apt的工具(annotation processing tool) 可以从有元数据的java class 或是类文件中生成新java source code 同时还可以编译原始的java程序和生成的程序

2. Generic Types (泛型)
java5.0中使用最多的是在集合类中, 在5.0之前.集合类只提供一种类型(object 类型)存储. 而现在可以提供多种数据类型,具体语法有点像C++中的模板类.

sample
before

ArrayList list = new ArrayList();
list.add(0, new Integer(42));
int total = ((Integer)list.get(0)).intValue();

after
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42));
int total = list.get(0).intValue();

因此。在以前需要做casts 而现在不需要了。

3. Autoboxing and Auto-Unboxing of Primitive Types(基本类型的自动拆箱,装箱)
对于像int, boolean,double等基本类型,java5.0中会当放放集合类型中时自动为其装箱成相应的对像如Integer,Boolean,Double数据类型,当取出时自动拆箱成相应的基本数据类型

sample
before

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42));
int total = (list.get(0)).intValue();

after

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, 42);
int total = list.get(0);

4. Enhanced for Loop (增强型循环语句)
在以前使用最多的是Iterator class 该类提供对集合元素的遍历访问. 在java 5.0中增强型的循环语句允许直接对集合内元素进行遍历.

sample
before

ArrayList<Integer> list = new ArrayList<Integer>();
for (Iterator i = list.iterator(); i.hasNext();) {
Integer value=(Integer)i.next();
}

after

ArrayList<Integer> list = new ArrayList<Integer>();
for (Integer i : list) { ... }

5. Static Import (静态常量导入)
使用 " import static" 关键字,让你能够直接导入类中的静态的常量,而不需要从该类中继承

sample
before

import java.awt.BorderLayout;
getContentPane().add(new JPanel(), BorderLayout.CENTER);

after

import static java.awt.BorderLayout.*;
getContentPane().add(new JPanel(), CENTER);

6. Formatted Output(格式化输出)
能够让你用printf语句格式化输出. 对于Data和BigInteger类型的格式化规则可以参照java.util.Formatter 类. 这使得你原先C的程序在printf中不南要做任何的改变

sample

System.out.printf("name count%n");
System.out.printf("%s %5d%n", user,total);

注意,虽然在Unix环境下也支持使用n 做为回车换行,但是为了使程序能够跨平台.在java中使用%n 来替代.

7. Formatted Input(格式化输入)
使用scanner API 来支持对读入数据的格式化, 如果要使用更为复杂的格式.可以使用java.util.Formatter 类中的正则表达式.

sample

Scanner s= new Scanner(System.in);
String param= s.next();
int value=s.nextInt();
s.close();

8.Varargs (变参数)
变参数,允许使用不定参数做为函数的参数,在以前则需要使用数组来传递

sample

void argtest(Object ... args) {
for (int i=0;i <args.length; i++) {
}
}
argtest("test", "data");

9.Concurrency Utilities ( 线程同工具包)
在java5.0中加入JSR-166中对线程同步的工具包,以支持更为强大,更高层的线程操作(运行线程本身,和起动线程). 提供了强大的线程任务管理框架,线程安全队列,定时器,锁(包括原子锁:注此处为小粒度的锁,以前只能使用对方法和对像加锁) 该包存在于java.util.concurrent

sample

final private Semaphore s= new Semaphore(1, true);
s.acquireUninterruptibly(); //for non-blocking version use s.acquire()
try {
balance=balance+10; //protected value
}finally {
s.release(); //return semaphore token
}

10. rmic -- The RMI Compiler( RMI 编译器)
java5.0中不需要再使用rmic工具来生成远程接口的stubs,而是通过在运行时自动的发现(动态代理)来实现.

11. Scalability and Performance(可测量性和性能)
java5.0中承诺通过增加新的起动时间和运行期内存的跟踪功能来改进了java的可测量性和性能.


12. Monitoring and Manageability(监控和管理)
java5.o中提供了对JVM的监控和管理,通过使用JMX(java management extensions)框架和远程连接协议来对JVM进行监控和数据观查与测量

13 其它改进
a. New JVM Profiling API (JSR-163)
b. Improved Diagnostic Ability
c. Desktop Client(外观)
d. Core XML Support
e. Supplementary Character Support ( unicode 4 support)
f. JDBC RowSets (CachedRowSet, WebRowSet)

参考 : http://java.sun.com/features/2003/05/bloch_qa.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值