1.自动包装和解包(Autoboxing and unboxing)
代码示例
往一个ArrayList中加入一个整数,1.5版本以前的版本写法是:
List list = new ArrayList();
list.add( new Integer( 10 ) );
而在1.5版本中可以写为:
list.add( 10 );
因为,在1.5版本中,对一个整数进行包装,使之成为一个Integer对象(即包装,boxing),然后加入到一个ArrayList中的做法被认 为是没有必要的,反之,解包(unboxing)的做法也是没有必要的,这样的代码只是增加了程序的文本长度而已,所以1.5版本支持了自动包装和解包操 作,对于bool/Boolean,byte/Byte,double/Double,short/Short,int/Integer,long /Long,float/Float的相应包装/解包操作都进行了支持,从而使代码变得简单。
2.更优化的循环语句(The inhanced for loop)
代码示例
一个典型的遍历数组的循环语句,1.5版本以前的写法是:
for ( Iterator iterator = list.iterator(); iterator.hasNext(); )
{
Integer n = (Integer)iterator.next();
...
}//for
而在1.5版本中可以写为:
for ( Integer n : list )
{
...
}//for
显然1.5版本的写法比以前是大大简化了,但是在需要修改集合,比如删除其中元素时不能采用这种写法。之所以Java1.5版本没有象C#那样干脆定义一个foreach关键词,主要是因为SUN认为增加一个专门的关键词成本太高了(too costly)。但1.4版本中就曾经增加了assert关键词,1.5版本中也新增加了enum关键词,因此这一解释恐怕并不那么令人信服。
3.参数可变的方法和printf
代码示例
当不能确定一个方法的入口参数的个数时,以往版本的Java中,通常的做法是将多个参数放在一个数组或者对象集合中作为参数来传递,1.5版本以前的写法是:
int sum(Integer[] numbers)
{
int nSum = 0;
for(int i: numbers)
nSum += i;
return nSum;
}
...
//在别处调用该方法
sum(new Integer[] {12,13,20});
而在1.5版本中可以写为:
int sum(Integer... numbers)
{
int nSum = 0;
for(int i: numbers)
nSum += i;
return nSum;
}
...
//在别处调用该方法
sum(12,13,20);
显然,1.5版本的写法更为简易,也更为直观,尤其是方法的调用语句,不仅简化很多,而且更符合通常的思维方式,更易于理解。
1.5版本自身就有一个应用该特征的典型例子,即C风格的格式化输出方法——printf。
代码示例
输出一个加法算式,1.5版本以前的写法是:
int x = 5;
int y = 7;
int nSum = x + y;
System.out.println(x + " + " + y + " = " + nSum);
而在1.5版本中可以写为:
System.out.printf("%d + %d = %d/n", x, y, nSum);
以上两种写法的输出结构是一样的,即“5 + 7 = 12”。
这种改变不仅仅是形式上的,printf还可以提供更为灵活、强大的输出功能,比如限定按照两位整数的形式输出,可以写为 “System.out.printf("%02d + %02d = %02d/n", x, y, nSum);”,输出结果将是“05 + 07 = 12”。
4.枚举
代码示例
构建一个表示色彩的枚举,并赋值,在1.5版本中可以写为:
public enum MyColor{ Red, Yellow, Blue }
MyColor color = MyColor.Red;
for ( MyColor mycolor : MyColor.values() )
System.out.println( mycolor );
以往的Java版本中没有enum关键词,1.5版本中终于加入了进来,这确实是一个令人高兴的改进。此外,enum还提供了一个名为values() 的静态方法,用以返回枚举的所有值的集合。所以,以上程序的输出结果是把“Red”、“Yellow”、“Blue”分行输出。
而enum提供的静态方法valueOf()则将以字符串的形式返回某一个具体枚举元素的值,比如“MyColor.valueOf(“Red”)”会返 回“Color.Red”。静态方法name()则返回某一个具体枚举元素的名字,比如“MyColor.Red.name()”会返回“Red”。类似 的方法还有不少。此外,enum自身还可以有构造方法。
5.静态引用
代码示例
当我们要获取一个随即数时,1.5版本以前的写法是:
import java.lang.Math; //程序开头处
...
double x = Math.random();
而在1.5版本中可以写为:
import static java.lang.Math.random; //程序开头处
…
double x = random();
静态引用使我们可以象调用本地方法一样调用一个引入的方法,当我们需要引入同一个类的多个方法时,只需写为“import static java.lang.Math.*”即可。这样的引用方式对于枚举也同样有效。
6.总结
以上对J2SE1.5的部分新特征做了一些简单的介绍。总而言之,1.5版本的Java确实给我们带来了很多令人激动的变革,如同以上介绍的那样,很多功能以前的版本也能实现,但是不能实现得这样简单、漂亮。相信这次变革会给Java带来更多的追随者。
- 浏览: 451075 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (371)
- Java (44)
- Flex (25)
- Design Pattern / UML (5)
- JVM (14)
- Software Engineer (4)
- Testing (30)
- Web Backend (60)
- Linux (7)
- Database (11)
- SOA (28)
- English (6)
- FX (5)
- SAP Support (25)
- SAP Development (5)
- SAP Impl & Oprn (8)
- Articles (15)
- Music (4)
- Recipe (14)
- Multi-thread (4)
- Lucene (2)
- CS basic / Algorithm (12)
- Tour (3)
- C C++ (21)
- Others (10)
- Code Repository C++ (1)
- Code Repository Java (1)
- Code Repository Algorithm (1)
- Code Repository SQL (1)
- Web Frontend (4)
最新评论
-
xiangxm:
Java 强引用、 软引用、 弱引用、虚引用 -
nml-lyb:
123
Mule 的第一个例子 -
nml-lyb:
http://www.baidu.com
Mule 的第一个例子 -
white___ant:
...
Java 强引用、 软引用、 弱引用、虚引用 -
joeyon:
...
Java NIO介绍
发表评论
-
java8 Stream Lazy 解释 (非实现原理)
2015-07-22 07:49 1537http://blog.csdn.net/dm_vincen ... -
java8 系列2 深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
2015-07-22 07:00 2439http://zh.lucida.me/blog/java ... -
java8 系列1 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
2015-07-22 06:58 1006http://zh.lucida.me/blog/java- ... -
Java 8 Stream探秘 具体实现
2015-07-22 06:31 850http://colobu.com/2014/11/18/J ... -
Arrays.asList() 的了解
2015-07-21 23:05 1124为什么Arrays.asList() 返回的list是 i ... -
java8 Lambda expressions
2015-07-14 13:09 809The single most important chan ... -
java8 new features
2015-07-08 02:06 649http://www.javacodegeeks.com/2 ... -
ReentrantLock与synchronized
2014-09-02 23:34 512http://uule.iteye.com/blog/148 ... -
PriorityQueue的使用
2014-05-29 12:14 892http://blog.csdn.net/yangzhon ... -
java的移位操作详解,左移和右移 << >>, 补码计算
2014-04-17 10:28 763---------------------补码--- ... -
深入Java集合学习系列:ArrayList的实现原理
2014-02-13 09:04 530http://zhangshixi.iteye.com/bl ... -
java集合类 ------------ 实现 细节
2014-02-12 23:12 491深入Java集合学习系列:ArrayList的 ... -
两种简单的方式快速实现hashCode 和 equals方法
2014-02-04 10:46 600http://hi.baidu.com/coolcat_p ... -
集合类 Set
2013-12-30 03:50 465http://www.cnblogs.com/yuchao ... -
正则表达式30分钟入门教程
2013-10-22 00:21 503http://blog.csdn.net/cumt168/a ... -
总结Java方法(函数)传值和传引用的问题
2013-09-16 08:38 570http://java.chinaitlab.com/bas ... -
有状态,无状态对象是什么概念
2013-06-21 06:00 999http://blog.csdn.net/showwair/ ... -
Dom4j的使用(全而好的文章)
2013-06-09 21:12 505http://xhy0422.iteye.com/blog/ ... -
serialVersionUID 用来表明类的不同版本间的兼容性
2013-06-03 23:12 775http://blog.csdn.net/hulefei29 ... -
java集合类
2013-01-25 10:47 683http://blog.csdn.net/softwave ...
相关推荐
JAVA1.5新特性
java1.5新特性.pdf
java1.5新特性[定义].pdf
java1.5新特性 枚举 问我文字大于20个字没问题吧?我曰:没问题,然后我凑了20个字~
//这里就是自动的装箱,将3转换成Integer类型并放到集合中自动拆箱包装类自动转为基本类型 Integer >> int面试常见题目:自动拆箱与自动装箱的问
转载 jdk1.5的一些新特性,希望能帮助大家!
JDK1.5新特性
java 1.5的新特性,小小总结fffff
java sdk1.5 新特性 JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和...
1.增强的for循环【foreach{}迭代数组或集合】 格式:for(变量的类型 变量名:集合变量名 ){} 注意:集合变量可以是数组或实现了... 格式:import static java.lang.Math.* 注意:这时候的导入就需要加类名了
jdk1.5新特性 泛类型和泛型方法是Java5.0 中的新特性。一种泛类型用一个或多个泛型变量定义,可以有一个或多个,泛型变量做参数占位符或做返回值 的方法。
jdk1.5 tiger java5 新特性
总结了包括for寻混,枚举,静态导入,泛型^
JDK1.5新特性中的最重要的一点。让你彻底明白增强for循环的强大和方便
Java的泛型和动态参数,以及for循环的使用Connections类的详解,list,set的详解
jdk1.5的新特性,java基础加强部分
JAVA5.0新特性讲解与例子 泛型 枚举等
Enum是Sun全新引进的一个关键字,看起来很象是特殊的class,它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。在声明一个enum类型时,应该注意到enum类型有如下的一些特征: