java JDK1.5 新特性总结
新特性的出现,要么是为了简化开发,要么是为了增强程序的安全性,在jdk1.5中出现了许多新特性:下面就一一论述下:
1. 静态导入 :import static
普通的import可以导入一个类或者某个包中的所有类
而静态导入是导入某个类下的某个或所有静态的方法
在java的类库中有大量的为了简化开发而出现的工具类,这些类的方法一般都是静态的,有了静态导入,我们在使用这些工具类方法时就可以 直接使用方法名了。
代码示例:
import java.util.*; import java.util.Arrays.*; ... public static void main(String[] args) { //对数组进行排序 int[] arr = {2,5,44,52,10,110}; //以前的做法: Arrays.sort(arr); //新特性做法 sort(arr); }
注意:
默认包无法用静态导入。
如果导入的类中有重复的方法和属性则需要写出类名,否则编译时无法通过。
过度使用这个特性也会一定程度上降低代码地可读性。
2. 可变参数 :
一个方法接收的参数个数不确定
格式:返回类型 方法名 (参数类型... 参数名) {...方法体...}
特点:
1、出现在参数列表的最后
2、变参数类型和变量之间,前后有无空格都可以
3、调用可变参数的方法时,编译器为该可变参数隐式创建了一个数组,在方法体中以数组形式访问可变参数
代码示例:
假设我们要写一个简单的方法打印一些对象,
//以前的做法 void write(obj1); void write(obj1,obj2); void write(obj1,obj2,obj3); ......
在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了
void write(Object... objs) { for (Object obj: objs) System.out.println(obj); }
3. 高级for循环 :
语法 :
for(类型 变量名 : 要被遍历的数组或集合变量名)
{
...
}
注意 :
· 迭代变量必须在()中定义
· 集合变量必须是数组或实现了Iterable接口的集合类
代码示例:
//普通for循环 public static void for_1() { List<String> list = new ArrayList<String>(); //普通for循环 for (int i = 0;i<list.size() ;i++ ) { System.out.println(list.get(i)); } } //增强for循环 public static void for_2() { List list = new ArrayList<String>(); for (List<String> l: list) System.out.println(l); }
4. 基本数据类型的自动装箱和拆箱
自动装箱/拆箱大大方便了基本类型数据和它们包装类地使用。
自动装包:基本类型自动转为包装类.(如:int --> Integer)
自动拆包:包装类自动转为基本类型.(如:Integer --> int)
在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制解决了我们的问题。
代码示例:
基本数据类型的对象缓存:
Integer num1 = 2; Integer num2 = 2; System.out.println(num1 == num2);//结果为:true
注意:当数字在-128—127之间时,Integer不会新开辟空间,
这其实也是一种设计模式,称为享元设计模式:
若果有很多很小的对象,它们有很多相同的东西,可以把它们变成一个对象,不用的东西把他们变成外部的属性,作为方法的参数传入。
Integer num3 = 129; Integer num4 = 129; System.out.println(num3 == num4);//结果为flase
5. 枚举(是一种特殊的类)
概念介绍:
1、枚举让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错。
2、枚举可以让编译器在编译时就可以控制源程序中填入的非法值,而普通变量的方式在开发阶段无法实现这一目标
3、枚举的每一个元素都是一个枚举类型的对象
4、枚举覆写了Object的toString()方法
特点:
1、构造方法必须定义成私有的
2、枚举元素必须位于枚举体中的最开始部分。最后一个枚举元素后面加分号
3、只要用到枚举类,枚举类里的元素都会初始化,调用无参的构造方法
4、如要调用有参,在元素后面加括号——>里面传入相应的类型参数
5、当枚举里只有一个元素时,就可以作为一种单例的实现方式。
代码示例:
public enum WeekDay { SUN(1),MON,TUE,WED,THI,FRI,SAT;//有参数的构造方法使用 private WeekDay() {System.out.println("空构造方法");} private WeekDay(int day) {System.out.println("有参数构造方法");} } public enum TrafficLamp { //由于枚举中含有抽象方法,因此枚举对象必须实现它, //常用方式是匿名内部类 RED(30) { public TrafficLamp nextLamp() { return GREEN; } }, YELLOW(5){ public TrafficLamp nextLamp() { return RED; } }, GREEN(60){ public TrafficLamp nextLamp() { return YELLOW; } }; public abstract TrafficLamp nextLamp(); private int time; private TrafficLamp(int time) { this.time=time; } } }
6. 注解(一种特殊的类)
特点:
1、相当于在程序中打了标记,根据标记编译器会做出相应的处理
2、注解是一个特殊的类,每一个注解都是一个类,调用注解就相当于创建了注解类的实例对象
3、注解类上的注解,称为 "元注解",它只作用于注解类
例如 :
@Retention()
:表示注解类的生命周期
它有三种取值:
|--
RetentionPolicy.SOURCE --> java源文件
|--
RetentionPolicy.CLASS --> class文件
|--
RetentionPolicy.RUNTIME --> 内存中的字节码(运行时期)
·RetentionPolicy
是枚举
它的取值有三种 :SOURCE,CLASS,RUNTIME
·常用的注解类的
@Retention
|--
@Override --> RetentionPolicy.SOURCE
|--
@SuppressWarnings --> RetentionPolicy.SOURCE
|--
@Deprecated --> RetentionPolicy.RUNTIME
·注解的属性类型(返回值类型) :基本数据类型(byte,short,int,long,float,double,boolean,char),String类型,Class类型,enum枚举类型,annotation注解类型, 还可以是以上类型的array数组类型。
个人认为最有用的注解:
在开发中我们经常需要覆写父类或超类的成员方法,加上@override 会使我们在覆写时出现的错误直接在编译期被报出。。。简化了开发难度
7、泛型
由于泛型的内容过多,因此在此篇不再论述,在另一篇中会详细介绍
posted on 2013-02-02 14:28 Xiaobin.Wang 阅读(166) 评论(0) 收藏 举报
浙公网安备 33010602011771号