探索JDK1.5的新特性__Calvin Austin/文 万世杰/译

探索JDK1.5的新特性

        今天二月Sun公司推出了JDK 1.5(被命名为Tiger). 其中包括了15个被更新折组件分别来自JSR和来自JCP, 有将近100个比较大升级.
        这么多的更新和变化, 你可能想知道应该从什么地方开始学习这些呢. 在以前的发布的版本中, 所有的变化都会放到发布手册中. 这篇文章是来自Sun J2SE小组, 介绍了所有新的变化. 它的主要作用是在你深入了解API之前对JDK 1.5有一个大致的了解.
        J2SE 1.5功能主要集中在以下几点:
        ·简易开发
        ·可扩展性和性能
        ·检控和管理
        ·客户端(桌面)
        其中还有一些小的变化, 将会放到本文的最后. 因为他们不能被很贴切地归到以上的类中. 下面将详细介绍各部分内容.

简易开发
        你可能已经看过一些关于Java语言简易开发的一些新特性. 这些变化包括一般类型(generic types), 元数据metadata, 自动装箱(autoboxing), 循环方法的加强(enhanced loop), 枚举类型(enumberated types), 静态引用(static import), C风格的输入输出格式化(c style formatted input/output), 可变参数(variable arguments), 同步工具(concurrency utilities)和一个简化生成RMI接口的方法(simpler RMI interface generation).
        在JDK 1.5测试版中缺省的编译是由Javac 1.4实现的. 如果想实现以上这些语言新特性的必须要加上-source 1.5这个参数.

元数据
        J2SE 1.5中的元数据特性提供了一个连接附加数据到Java Class, Interface, Method和Field中的能力, 这些附加的数据或者注解能被javac编译器或者其它的工具识别, 并且可以根据配置保存在class文件中, 并且能在运行时通过Java的reflection API来发现.
        给Java平台添加元数据的一个主要原因是似的开发和运行工具能得到一个基础框架, 使得可以减少在编码和发布的时候需要的额外的努力.
        一个工具能使用这些元数据信息来产生一些额外的代码或者在测试的时候提供额外的信息.
        代替元数据工具, 下面的范例代码创建了一个智能调试的元数据注解, 这个注解将在随后的调试中简单的显示出来.
        我们可以看到大部分的元数据标签组成了一个标准的, 固定的集合.
        import java.lang.annotation.*;
        import java.lang.reflect.*;
        @Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
        @interface debug {
                boolean devbuild() default false;
                int counter();
        }

        public class MetaTest {
                final boolean production = true;
                @debug(devbuild = production, counter = 1) public void testMethod() {}
                public static void main(String[] args) {
                        MetaTest mt = new MetaTest();
                        try {
                                Annotation[] a = mt.getClass().getMethod("testMethod").getAnnotations();
                                for(int i = 0; i < a.length; i++) {
                                        System.out.println("a[" + i + "]=" + a[i] + " ");
                                }
                        }
                        catch(NoSuchMethodException e) {
                                System.out.println(e);
                        }
                }
        }
        用Metadata处理工具我们可以用Metadata标签代替一些重复的代码. 例如, Java RPC需要实现Remote Interface, 现在可以通过Metadata标签来实现.
        传统方法:
        public interface PingIF extends Remote {
                public void ping() throws RemoteException;
        }
        public class Ping implements PingIF {
                public void ping() {}
        }
        Metadata标签方法:
        public class Ping {
                public @remote void ping() {}
        }

Generic Types
        Generic types已经被广泛的在Java community中被应用了, 现在它已经是J2SE 1.5中的一部分了. Generic types最先出现在集合类中(Collection API). 下面这个例子使用标准和j2se 1.4.1类库编写的.
        ArrayList list = new ArrayList();
        list.add(0, new Integer(42));
        int total = ((Integer)list.get(0)).intValue();
        可以看到最后一行里我们不得不把Integer类型转化成为int类型. 这是因为collection API只能存贮对象, 如果不做类型的转换, 程序就会抽出一个ClassCastException异常.
        下面我们用Generified Collections library编写上面的例子:
        ArrayList<Integer> list = new ArrayList<Integer>;
        list.add(0, new Integer(42));
        int total = list.get(0).intValue();
        在程序中用<>标签来声明Cenerified API. 用了generified

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值