---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
在java的JDK1.5版本后出现了一些新特性,如:增强型for循环,可变参数,静态导入,自动装箱/拆箱,枚举,泛型,注解等等。
其中像枚举,泛型,注解已在其它篇幅说明,这里将介绍JDK1.5版本的其它新特性
1、 增强型for循环
(1) 语法格式:for(type 变量名 : 需遍历的集合或数组){...}
被遍历的对象可以是数组或者实现了Iterable接口的集合类。type前可以加修饰符,如final。
(2) 对集合使用高级for遍历时,集合声明时泛型类型必须明确,否则难以确定type。
(3) 高级for与传统for的区别
高级for遍历对象需确定泛型类型,不能在遍历过程中对遍历对象进行修改,这点在我博客集合的迭代器部分有说明,用高级for不需要具体的下标,一般是一次性从头至尾进行。
传统for,在遍历集合使用迭代器时没太大区别,只是对遍历对象的修改,遍历顺序灯操作较为自由,在遍历数组时,还是建议使用可以操作角标的传统for。
(4) 示例:
ArrayList<String>arrays = new ArrayList<String>(); arrays.add("aaa"); arrays.add("bbb"); for(String str : arrays){ System.out.println(str); }
2、 可变参数
以前的版本在一个方法接收的参数不固定时,需定义多个重载方法,那么这里引入可变参数的新特性。即方法的参数列表是不固定的,可以接收多个同类型的参数。
(1) 格式:void fun(int... args){...}其中int... args便是表示可接收多个int型参数。
(2) 可以有其它参数,但可变参数只能放在最后面。
(3) 可变参数其实是数组的简写形式,即隐式的封装成了数组。
(4) 示例:
public staticvoid method(){ fun("aaa", 1,2,3); fun("bbb", 4,5); } public static void fun(String str, int...args){ for(int i : args){ System.out.println(str + " :"+i); } }
3、 静态导入
为简化常用语句的前缀,让书写更方便,该版本引入静态导入的特性。
(1) 格式:在源码开头处声明import static 导入类。
(2) 需注意点:当类名重名时需要制定具体的包名。
当方法重名时,指定具体所属的对象或类。
如Arrays中的toString方法与Object中的toString方法会重名,需写明所属类。
(3) 示例:
//静态导入 import static java.util.Arrays.*; import static java.lang.System.*; public class Test{ public static void main(String[] args){ //省略了Sytem out.println("输出语句"); int[] s ={1,2,3,4,5}; //不能只写toString,那样不能确定要使用哪个toString out.println(Arrays.toString(s)); out.println(s.toString()); } }
4、 自动拆箱/装箱
为了简化一些强制转换的显示书写,如以前的Integer num = new Integer(3);
(1) 自动装箱
Integer num = 3;
隐式的将int转成了Integer包装类。
(2) 自动拆箱
num = num+2;
或
System.out.println(num+ 12);
其中num会被拆箱变成int型再与数值(2或12)相加。
(3) 如果数值在128位以内(一个byte),则再表示该数时将不再开辟空间。
示例:
//num1与num2所表示数值在128位以内,同一份内存 Integer num1 =12; Integer num2 =12; System.out.println(num1== num2);//结果为true //此时num1和num2将不是同一份内存地址了 Integer num1 =128; Integer num2 =128; System.out.println(num1== num2);//结果为false
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------