分享
 
 
 

J2SE1.5的新特点(之一)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

J2SE1.5的新特点

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有