前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >J2SE1.5的新特点(之一)

J2SE1.5的新特点(之一)

作者头像
田春峰-JCJC错别字检测
发布2019-02-14 15:12:54
5130
发布2019-02-14 15:12:54
举报
文章被收录于专栏:字根中文校对软件

J2SE1.5的新特点<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

J2SE 的下一个版本名字叫“Tiger”在让程序员的代码更清楚、更短、更安全,更加容易开发的情况下不损失其兼容性。 请你简单谈谈J2SE 1.5 的优点。

新的java语言特点都基于一个目的:尽量使它们都使用一些相同的语法习惯并提供语义支持。也就是说:以前程序员需要书写的很多语义编程格式的工作在新的程序中由编译器来做。

什么改变对程序员来说是最困难的呢?那些改变是程序员不的不面对的呢?

一般来说,没有什么让人感到困难的改变,泛型编程的改变可能大些。使用泛型编程需要在声明的时候提供附加的声明信息。比如: List words = new ArrayList(); 需要替换成: List<String> words = new ArrayList<String>();

这样做的一个优点是,如果你插入数组的数据类型不是字符串的话,你就可以在编译的时候发现和解决这个bug。如果不使用上面的声明,这个bug不可能在编译的时候发现,程序运行后会出现ClassCastException 的错误。 另一个好处是:你不在需要担心集合中的元素超出了范围:

String title = ((String) words.get(i)).toUppercase();

使用:

String title = words.get(i).toUppercase();

你能简单的介绍一下这些J2SE 1.5中改变最大的六个方面吗?

好的,

  • 泛型编程 – 提供集合对象的编译时安全类型检查。
  • 增强 for 循环 - 编程更容易,去掉了修正了导致迭代出错的问题。
  • 装箱/拆箱 - 原始类型(int)和封装类型(Integer)的转换更容易。
  • 类型安全的枚举 – 提供了最常使用的类型安全的枚举模式。(Effective Java, Item 21)
  • 静态导入Static import - Lets you avoid qualifying static members with class names, without the shortcomings of the Constant Interface antipattern (Effective Java, Item 17).
  • Metadata – 避免编写描述信息的代码,实现“声明”编程的模式。程序员声明需要做什么,然后由相关的工具来完成具体的工作。

过滤一个集合中的元素,现在的做法和j2se1.5中的做法有什么不同呢?

现在的做法是:

/**

* 从一个指定的集合中去掉一个4个字符的元素。

*/

static void expurgate(Collection c) {

for (Iterator i = c.iterator(); i.hasNext(); ) {

String s = (String) i.next();

if(s.length() == 4)

i.remove();

}

}

上面的代码,有些缺陷,在运行的过程中可能出错。比如:在集合中如果包含一个StringBuffer类型的数据。

以后可以这样做:

static void expurgate(Collection<String> c) {

for (Iterator<String> i = c.iterator(); i.hasNext(); )

if (i.next().length() == 4)

i.remove();

}

再说说增强的for循环吧!

一个集合中元素的迭代,原来的做法绕的慌。J2SE1.5中大多数情况下你不需要使用Iterate 来遍历一个集合。增强的for循环,让编译器来完成具体的迭代工作。比如: void cancelAll(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) { TimerTask tt = (TimerTask) i.next(); tt.cancel(); } } 现在可以这样做:

void cancelAll(Collection c) {

for (Object o : c)

((TimerTask)o).close();

}

注意:上面的冒号,它表示:in。在C#中或者很自然的一个替代是:foreach 和in 。但是考虑到兼容性,我们没有那样做。

泛型编程和增强的for结合后会是什么结果呢?

上面的例子中的代码,可以用下面的代码表示:

void cancelAll(Collection<TimerTask> c) {

for (TimerTask task : c)

task.cancel();

}

什么是装箱?

大家知道,java语言中有两种数据类型:一些是基本数据类型,另一些是对象引用类型。基本的数据类型无法直接放入到集合中,除非做相应的类型转换。这种转换非常枯燥。

据个例子: map数据类型的key用来存储单词,value用来存储单词重复的次数。这是一个计算单词出现频率的小程序。

public class Freq {

private static final Integer ONE = new Integer(1);

public static void main(String args[]) {

Map m = new TreeMap();

for (int i=0; i<args.length; i++) {

Integer freq = (Integer) m.get(args[i]);

m.put(args[i], (freq==null ? ONE :

new Integer(freq.intValue() + 1)));

}

System.out.println(m);

}

}

下面是采用装箱,泛型,和增强的for循环后的代码:

public class Freq {

public static void main(String args[]) {

Map<String, Integer> m = new TreeMap<String, Integer>();

for (String word : args)

m.put(word, m.get(word) + 1);

System.out.println(m);

}

}

需要注意:上面的程序假定拆箱为null的时候,值为0。

之二:

http://www.csdn.net/develop/read_article.asp?id=18442

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2003年05月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档