黑马程序员——java基础---JDK1.5新特性

------- android培训java培训、期待与您交流! ---------


Jdk1.5新特性

一,自动装箱与拆箱

Java有基本数据类型,在这些基本数据类型周围又有包装类。通常,我们需要将一种类型转换成另一种。

自动装包:基本类型自动转为包装类(int> Integer)
自动拆包:包装类自动转为基本类型(Integer > int)

在JDK1.5之前,我们不能对集合存放基本类型,现在自动转换机制解决了这个的问题。

下面是示例代码:

import java.util.ArrayList;
import java.util.Collection;

public class AutoNewTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Collection<Integer> c = new ArrayList<Integer>();
		int a = 3;
		c.add(a);//自动转换成Integer.
		Integer b = new Integer(2);
		c.add(b + 2);//这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer.

	}

}

二,枚举

为什么出现枚举?

在开发过程中,经常出现这样的数据集,它们的数值在程序中是稳定的,而且数据集中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的数据集,春夏秋冬四个数据元素组成了四季的数据集,一月到十二月十二个数据元素组成了一年的数据集。在java中如何更好的使用这些“数据集”呢?

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

以下代码详细介绍了枚举的用法,包括定义,遍历,switch,enumset,enummap等。

import java.util.EnumMap;  
import java.util.EnumSet;  

public class EnumTest {  
    // 定义一个enum枚举类型性别,包括两个实例man,women  
    public enum sex {  
        man, women  
    };  
    public enum enumMathod{
    	 // 为每个enum实例添加不同的实现方法  
        eat {  
            String getInfo() {  
                return "吃饭";  
            }  
        },  
        study{
        	String getInfo() {  
                return "学习";  
            } 
        },
        sleep {  
            String getInfo() {  
                return "睡觉";  
            }  
        };  
        abstract String getInfo();  
    }
    // 测试函数  
    public static void main(String[] args) {  
        // 直接变量enum  
        for (sex s : sex.values())  
            System.out.println(s.name());  
        // switch与enum的结合使用  
        sex switchsex = sex.man;  
        switch (switchsex) {  
        case man:  
            System.out.println("男人");  
            break;  
        case women:  
            System.out.println("女人");  
            break;  
        }  
        // EnumSet的使用  
        EnumSet<sex> sexSet = EnumSet.allOf(sex.class);  
        for (sex s : sexSet) {  
            System.out.println(s);  
        }  
        // EnumMap的使用  
        EnumMap<sex,String> sexMap = new EnumMap<sex,String>(sex.class);  
        sexMap.put(sex.man, "男人");  
        sexMap.put(sex.women, "女人");  
        for (sex s : sex.values()) {  
            System.out.println(s.name() + ":" + sexMap.get(s));  
        }  
        
        //测试
        System.out.println("-----------------------------");
        for (enumMathod method : enumMathod.values()) {  
            System.out.println(method.getInfo());  
        }  
        
    }
} 
运行结果如图:

为什么不使用下面的方式?


public class Sex {
public static final int man = 1;
public static final Int women= 0;
}

这样的方式以前用了很长时间,也没有出现问题,为什么非要用枚举?

首先,这样写,它不是类型安全的,必须确保是int,

其次,要确保它的范围是0和1,

最后,打印的时候,只能看到0和1,其他人不看代码不知道1用来表示man,0用来表示women。


三,静态导入

静态导入,在你自己的类中使用静态导入,可以让你使用其它类中定义的类方法和类变量,而且这些类方法和类变量就像在本地定义的一样。也就是说,静态导入允许您在调用其它类中定义的静态成员时,可以忽略类名。

当你想使用static成员时,可以使用静态导入(在API中的类和你自己的类上,都可以使用该特性)。

1,格式:

    importstatic java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。
    import static java.lang.System.*//导入了Ssytem类中所有静态成员。
2,代码示例:

没有使用静态导入的代码:

public class TestStatic {   
      public static voidmain(String[] args) {   

          System.out.println(“没有使用静态导入”);   
      }   

}   
静态导入之后的代码:

import static java.lang.System.out;   
public class TestStaticImport {   
        public static voidmain(String[] args) {   
        out.println(“使用了静态导入”);   
      }   
}  

3,注意事项:

a,语法必须是import static,后面加你要导入的静态成员的完全限定名称,或者通配符。

b,当导入的两个类中有同名成员时,需要在成员前加上相应的类名。

c,当类名重名时,需要指定具体的包名。当方法重名时,指定具体所属的对象或者类。

d,可以在static对象引用、常量(记住,它们是static或final)和static方法上进行静态导入。

四,可变参数

适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
特点:
a,可变参数位于参数列表最后一项;
b,…表示可变参数,位于变量类型和变量名之间,前后有无空格都可以;
c,调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。
代码示例:

public class ChangeParam {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(add(8,13));
		System.out.println(add(8,13,3));
	}
	public static int add(int x,int ...args){
		int sum=x;
		for(int i=0;i<args.length;i++){
			sum+=args[i];
		}
		return sum;
	}

} 

五,增强for循环

1,  增强for循环与普通for循环的区别:

增强for循环必须有被遍历的目标(如集合或数组)。

普通for循环遍历数组的时候需要索引。

增强for循环不能获取下标,所以遍历数组时最好使用普通for循环。

2,  特点:

书写简洁。

对集合进行遍历,只能获取集合元素,不能对集合进行操作,类似迭代器的简写形式,但是迭代器可以对元素进行remove操作(ListIterator可以进行增删改查的操作)。

3,  书写格式:

for(数据类型变量名 :被遍历的集合(collection)或者数组) {

执行语句

}

4,  增强for循环使用示例:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ForTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	/* 1.普通数组中的使用 */  
        int array[] = { 1,2,3,4,5,6,7,8,9};  
  
        // 增强的for循环  
        for (int item : array) {  
            System.out.println(item);  
        }  
  
        // 普通for循环
        for (int i = 0; i < array.length; i++)  
            System.out.println(array[i]);  
  
        /* 2.二维数组中的使用 */  
        int array2[][] = {{1,2,3}, {4,5,6}, {7,8,9} };  
          
        // 增强的for循环  
        for (int arr[] : array2) {  
            for (int item : arr) {  
                System.out.println(item);  
            }  
        }  
  
        // 普通for循环  
        for (int i = 0; i < array2.length; i++) {  
            for (int j = 0; j < array2[i].length; j++) {  
                System.out.println(array2[i][j]);  
            }  
        }  
  
        /* 3.List中的使用 */  
        List<String> list = new ArrayList<String>();  
        list.add("我");  
        list.add("要");  
        list.add("进");  
        list.add("黑");  
        list.add("马"); 
          
        // 增强的for循环  
        for (String item : list){  
            System.out.println(item);             
        }  
                  
        //普通for循环
        for (int i = 0; i < list.size(); i++) {  
            System.out.println(list.get(i));  
        }  
  
        //迭代器遍历  
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {  
            System.out.println(it.next());  
        }  
<span style="white-space:pre">	</span>}

}

------- android培训java培训、期待与您交流! ---------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值