----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
JDK5.0中引入了许多java的新特性,有些特性是为了简化书写,有些特性是为了进一步满足开发人员的需求,恰当的使用新特性,能提升代码的效率,安全性。同时学习并使用新特性是成为一名优秀的程序员必不可少的技能。体现了开发人员的自学能力,同时也提升了项目的开发进度。JDK5.0引入了较多的新特性。比较有代表性的有以下新特性。
1、增强for循环:迭代数组和实现Iterator接口的集合,不可有进行涉及索引的操作。
当需要对特定元素的操作时,推荐使用不同的for循环。
2、静态导入:导入包中静态方法。
需要注意当导入的包中有相同类时需要写全相应类的包名。
3、可变参数:用于函数的参数上,操作的同一类型的元素个数不确定的时候。 必须放在参数的末尾作为最后一个参数。
可变参数的内部封装了数组,可变参数需用在方法参数的最后一个参数的情况。
4、自动拆箱与装箱:将基本数据类型封装为包装类
Integernum = 4; ---à自定装箱,等效于Integer num = new Integer(4);
num= num + 1; ---à自动拆箱再装箱:num+1是拆箱成int,然后装箱为Integer
为了优化内存,包装类含有缓冲池:Integer池大小:-128~127,一个字节
String池:字符串池,已存在的不再创建新的。
这里应用了享元设计模式Flyweight。
5、枚举:enum,限定和固定对象的个数,指定取值内容。
枚举对象必须放在整个类最前面
私有构造函数,可定义属性、方法,实现接口、继承类
枚举类中可以有抽象方法,但是在对象身上必须实现,即列出的枚举值必须实现。
比较两个值,可直接用==即可
6、泛型:为解决类型的安全机制而出现的。用<>表示
多用于集合中,限定存入集合中的元素类型;类型不确定时也可使用
泛型是提供给编译器检查用的,编译后会去掉“类型”信息,不会影响效率
静态方法无法访问类上定义的泛型,需自己定义在方法上
泛型不存在继承,赋值两边类型必须一样,或也可一边有泛型
好处:
将运行时期的错误转移到编译时期,更安全。
避免了强转的麻烦
通配符:
开发者不知道调用者传入的类型是什么的时候,可使用?代表唯一的任意类型。
泛型的限定:
向上限定:? extends E:接收E或E的子类型
向下限定:? super E:接收E或E的父类型
下面是静态导入的代码示范:
package cn.itcast.day1;
//import static java.lang.Math.max;
import static java.lang.Math.*;
import cn.itcast.day2.AnnotationTest;
public class StaticImport {
public static void main(String[] args){
AnnotationTest.sayHello();
int x = 1;
try {
x++;
} finally {
System.out.println("template");
}
System.out.println(x);
System.out.println(max(3, 6));
System.out.println(abs(3 - 6));
}
}
下面是制动拆装箱的代码示范:
package cn.itcast.day1;
public class AutoBox {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer iObj = 3;
System.out.println(iObj + 12);
String s1 = new String("abc");
String s2 = new String("abc");
Integer i1 = 137;
Integer i2 = 137;
System.out.println(i1 == i2);
Integer i3 = Integer.valueOf(213);
Integer i4 = Integer.valueOf(213);
System.out.println(i3==i4);
}
}
下面的代码是枚举的代码示范:
package cn.itcast.day1;
import java.util.Date;
public class EnumTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
WeekDay1 weekDay = WeekDay1.MON;
System.out.println(weekDay.nextDay());
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());
System.out.println(WeekDay.valueOf("SUN").toString());
System.out.println(WeekDay.values().length);
new Date(300){};
}
public enum WeekDay{
SUN(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}
}
下面是使用普通java类对枚举的模拟实现:
package cn.itcast.day1;
public abstract class WeekDay1 {
private WeekDay1(){}
public final static WeekDay1 SUN = new WeekDay1(){
@Override
public WeekDay1 nextDay() {
// TODO Auto-generated method stub
return MON;
}
};
public final static WeekDay1 MON = new WeekDay1(){
@Override
public WeekDay1 nextDay() {
// TODO Auto-generated method stub
return SUN;
}
};
public abstract WeekDay1 nextDay();
/* public WeekDay nextDay(){
if(this == SUN){
return MON;
}else{
return SUN;
}
}
*/
public String toString(){
return this==SUN?"SUN":"MON";
}
}
JDK5.0中的新特性是面试中的常考题目,需要掌握好,一方面有助于应付面试,另一方面对于开发也有较大的帮助。