Java 1.5 新特性
1,可变参数
可变参数特点:
1,只能放在参数列表的最后
2,...位于变量类型和变量名之间,前后有无空格都可以
3,调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,
在方法体中以数组的形式访问可变参数
如:
public int add(int x,int … args)
{
sum = x;
for(int i = 0;i<args.length;i++)
{
sum = sum+args[i];
}
return sum;
}
4,当方法重载时,方法里类型不知道有多少个,可以使用可变参数 ...
5,是数组参数的简写,可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
Override 与 Overload
Override :注释。表示一个方法重写。如果方法使用了这个注释而没有重写超类的方法,则编译器会报错。
注意:如果父类的这个方法是私有的,那么就不叫重写,因为子类不知道父类有这个方法。
Overload :重载。方法同名,但参数列表个数不一致。
注:如果方法返回类型不一样,就不叫重载。
2 , 高级 for 循环
对于集合,数据的另一种输出方式。
格式:for(数据类型 变量名:被遍历的集合(Collection)或者数组)
{
}
高级for和迭代器区别?
高级for对集合进行遍历,只能获取集合元素,不能对集合进行操作。
迭代器除了遍历,还可以进行remove集合中元素的动作。
如果使用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。
传统for和高级for有什么区别呢?
高级for有一个局限性,必须有被遍历的目标。
(比如:打印Hello 一百遍,高级for 无法完成)
建议在遍历数组的时候,还是希望使用传统for,因为传统for可以有脚标可操作
3,静态导入
静态导入可以导入静态方法,那么程序中就可以直接使用这些静态类中的方法。
如:import static java.util.Arrays.*; //导入Arrays 类中的所有静态成员。
import static java.lang.System.*;
Arrays.sort(arr); //导入包后,可简写代码,可改为 sort(arr);
注意:如果在Java5以下,那么静态导入等jdk1.5新特性都会报告错误。
4 , 基本数据的自动拆箱、装箱
如:
Integer in = 3; // 会自动装箱
System.out.println( in + 14 ); //会进行自动拆箱,然后进行运算。 结果:17
Integer i1 = 12;
Integer i2 = 12;
System.our.println( i1 = i2 ); //返回 true
Integer i3 = 129;
Inreger i4 = 129;
System.out.println( i3 = i4 ); //返回false
注意:Integer 在-128 ~ 127 使用的对象是同一个。类似于享元模式。
5,枚举
枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。枚举可以让某个类型的变量的取值只能为若干个因定值中的一个,枚举可以让编译器在编写代码时期就能判断其代码正确与否。
为什么要有枚举?
像有一些须要固定值来描述,且不让更改。如:定义的星期几或性别等。假用1-7 分别来表示星期一到星期日,但如果有人写成了 int weekday = 0; 以为是星期一那怎么办?所以须要枚举来限制weekday 只能取 对应的几个固定值。
使用enum枚举类的特点:
1,类默认继承了 java.lang.Enum 类
2,参数列表必须放在第一行。
3,参数列表是其类的子类。
4,底层已完成了对toString()方法的复写。
5,参数列表底层已完成了初始化。
6,属性的修饰关键字无须书写,底层已完成。
7,构造方法必须定义成私有的。
8,和普通 Java 类一样枚举类可以实现一个或多个接口。
9,若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法。
10,枚举类对象的属性不应允许被改动。
11,JDK 1.5 中可以在 switch 表达式中使用枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定。
12,如果枚举里只有一个成员时,同单例设计模式一样,可以作为一个单例来使用。
用枚举来写单例的好处:构造方法不用写
用普通类如何实现枚举功能?
1,私有的构造方法
2,每个元素分别用一个公有的静态成员变量表示
3,可以有若干个公有方法或抽象方法,例如,要提供nextDay方法必须是抽象的。
注意:采用抽象方法定义nextDay() 可以避免大量的if...else 语句
更多关于枚举的请看基础加强---枚举篇。
6,泛型
用于解决安全问题,是一个类型安全机制。
好处:
1,将运行时期出现问题ClassCastException 异常 转移到了编译时期方便于程序员解决问题,让运行时间问题减少,安全
2,避免了强制转换麻烦