JDK5.0新特性
------- android培训、java培训、期待与您交流! ----------
可变参数:
格式: public void test( int … arr){…………..}
可变参数的特点:
1. 只能出现在参数列表的最后
2. … 位于变量和变量名之间,前后有无空格都可
3. 调用可变参数的方法时,编译器为该可变参数隐含的创建一个数组在方法体中可以以数组的形式访问可变参数。
4. 调用方法时可变参数的位置可以不传值。
增强for循环:
格式: for(类型类型名:集合或者是数组)
{
…………………………………….
}
注意:迭代变量必须在()中定义,不能在外面定义,集合变量可以是数组或者实现了Iterable接口的集合类。
基本数据类型的自动拆装箱:
在JDK5.0以后对基本类型和对应的引用类型能够自动的拆箱和装箱。
Integer i1 =15;
Integer i2=15;
System.out.println(i1==i2); //结果为true,只当数的范围在-128~127之间时,结果才为true
//因为在这个范围之内的数会存到缓冲池中,当再次用到这个数时先到缓存池中查找。
枚举:
枚举和类差不多,枚举相当是一个类,枚举里面的元素相当于是这个类的实例对象
而且这些枚举值(枚举元素)相当于public static final的(public static final枚举元素 =new本实例对象;),也就是我们经常所定义的常量方式,因此枚举类中的枚举值最好全部大写。
枚举里面的元素都相当于是static final的。
将一个元素转换成枚举元素类型 枚举.valueOf(“aaa”);
格式:public enum名字
{
AA,BB;(当下面没有构造方法,或其他代码时这个分号写不写都可以)
}
带有构造方法的枚举:
1. 枚举元素列表必须放在所有成分之前(构造方法和所有成分必须放在元素列表之后。)
2. 枚举的构造方法必须是private的或default
3. 枚举里的每个元素都相当于一个本类行的实例对象。
4. public enum名字
{
AA(参数1),BB(参数1);(当下面没有构造方法,或其他代码时这个分号写不写都可以)
Private名字(参数1 ){….}
}
带有抽象方法的枚举:
例:
publicclass Enumtest {
publicstaticvoid main(String[] args) {
System.out.println();
}
enum TrafficLamp
{
RED(30)//这是匿名内部类,这样写相当于调用父类带参数的构造方法
{
public TrafficLamp nextLamp()
{
returnGREEN;
}
},
GREEN(20)
{
public TrafficLamp nextLamp()
{
returnYELLOW;
}
},
YELLOW(5)
{
public TrafficLamp nextLamp()
{
returnRED;
}
};
publicabstract TrafficLamp nextLamp();
privateinttime;
private TrafficLamp(int time){this.time=time;}
}
}
//用普通类模拟枚举的实现原理
public abstract class WeekDay {
private WeekDay(){}//枚举中的构造方法必须是私有的
public static final WeekDay SUN = new WeekDay(){
@Override
public WeekDay nextDay() {
return MON;
}};
public static final WeekDay MON = new WeekDay(){
@Override
public WeekDay nextDay() {
return SUN;
}};
//覆写同toString方法
public String toString()
{
return this==SUN?"SUN":"MON";
}
}
注:枚举只有一个成员时就可以作为一种单例的实现方式。