java——jdk1.5新特性

来源:互联网 发布:易哲软件 编辑:程序博客网 时间:2024/05/19 10:54
                     新特性

一、静态导入

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//trueInteger 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不支持多继承,所以枚举对象不能再继承其他类,也不能被继承。        2switch语句支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。        3.枚举只有一个成员时,就可以作为一种单例的实现方式
0 0
原创粉丝点击