您的位置:首页 > 编程语言 > Java开发

java——jdk1.5新特性

2015-06-14 23:22 597 查看
新特性


一、静态导入

import static java.Math.*:注意static的位置

注意:

当导入的两个类中有同名成员时,需要在成员前加上相应的类名。
当类名重名时,需要指定具体的包名。
当方法重名时,指定具体所属的对象或者类。


二、可变参数

如果一个方法在参数列表中传入多个参数,个数不确定,那么每次都要复写该方法,这时可以用可变参数作为数组形式参数

注意:

1.用...表示
2.只能位于参数列表的最后
3.调用可变参数的方法时,编译器会自动创建一个数组,利用数组来操作参数


三、增强for

1.除了简单遍历并读取其中的内容外,不建议使用增强的for循环

2.使用局限性:

对于数组,不能方便的访问下标值

对于集合,必须实现Iterable接口。与使用Interator相比,不能方便的删除集合中的内容(在内部也是调用Iterator)

四、自动装箱与拆箱

装箱:Integer i = 1;

拆箱:Integer num = new Integer(13);

Syso(num+1);

注意:

在一个字节之间(-128 ~ 127)的数,包装成Integer类型对象时,会存入常量池中的缓存,再创建一个对象的时候,如果其值在这个范围内,就会直接到常量池中寻找,不会再创建一个对象。因为这些小数值使用的频率很高,所以缓存到常量池中,被调用时就方便很多。
Integer i1 = 12;
Integer i2 = 12;
i1==i2//true

Integer i1 = 137;
Integer i2 = 137;
i1==i2//false

享元模式(flyweight):有很多小的对象,他们有很多属性相同,把属性相同的部分变为同一个对象,称为内部状态。那些不同的属性,把他们变成方法的参数,称为外部状态。这种优化内存,只创建一个对象的模式,称之为享元模式


五、枚举

1.概述:

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

练习:

用普通类如何实现枚举功能

定义一个Traffic 的类来模拟枚举功能。
1、私有的构造方法
2、每个元素分别用一个公有的静态成员变量表示
3、可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。

public abstract class Traffic {
public static final Traffic blue = new Traffic() {
public Traffic next() {
return yellow;
}

};
public static final Traffic yellow = new Traffic() {

public Traffic next() {
// TODO Auto-generated method stub
return red;
}

};;
public static final Traffic red = new Traffic() {

public Traffic next() {
// TODO Auto-generated method stub
return blue;
}

};;

public abstract Traffic next();
public  String toString() {
return this==blue? "GO":"STOP";
}
}


2枚举的基本应用:

Enum是Java 语言枚举类型的公共基本类。

1、通过enum关键字定义枚举类,枚举类是一个特殊的类,每个元素都是该类的一个实例对象。

2、枚举变量只能使用规定好的那些值,若不是这些值,编译器不会通过。

3、好处:在编译时期就会发现错误,表明值不符合,减少了运行时期的错误。

4、如果调用者想打印枚举类中元素的信息,需复写toString方法。

注:枚举类是一个class,而且是一个不可被继承的final类,其中的元素都是类静态常量。

public static void main(String[] args) {
WeekDay weekDay=WeekDay.MON;
System.out.println(weekDay);//输出枚举常量名
System.out.println(weekDay.name());//输出对象名
System.out.println(weekDay.getClass());//输出对应类
System.out.println(weekDay.toString());//输出枚举对象名
System.out.println(weekDay.ordinal());//输出此对象在枚举常量的次序
System.out.println(WeekDay.valueOf("WED"));//将字符串转化为枚举常量
System.out.println(WeekDay.values().length);//获取所以的枚举元素,并打印其长度
}

public enum TrafficLamp {
//这里';'可有可无,下面有其他方法时,不能省去
//后面的方法必须定义在变量的下面
RED(30) {
public TrafficLamp nextLamp() {
return GREEN;
}
},GREEN(45) {
public TrafficLamp nextLamp() {
return YELLOW;
}
},YELLOW(10) {
public TrafficLamp nextLamp() {
return RED;
}
};
public abstract TrafficLamp nextLamp();
int time;
private TrafficLamp() {};
private TrafficLamp(int time) {
this.time = time;
}
}

注意:
1、所有的枚举都继承自java.lang.Enum类,由于Java不支持多继承,所以枚举对象不能再继承其他类,也不能被继承。
2、switch语句支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
3.枚举只有一个成员时,就可以作为一种单例的实现方式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jdk1 导入