(20) - JDK1.5的一些新特性

---------------------- 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培训、期待与您交流! ----------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值