一、自动装箱拆箱
装箱:例如:Integer>
拆箱:例如:i+23; 23会自动拆成基本数据类型的23,来进行运算
二、可变参数
实际上就是里面定义了一个数组
注意:定义参数时,要把可变参数定义在末尾。因为是从前向后匹配
示例代码:
public class Change {
/**
* @param args
*/
public static void main(String[] args) {
// TODOAuto-generated method stub
change(2,3,5,7,2);
change(2,34,5);
change(3);
}
public static void change(int...cha){//可变参数
for(int i=0;i<cha.length;i++){
System.out.print(cha[i]+" ");
}
System.out.println();
}
}
运行结果:
2 3 5 7 2
2 34 5
3
三、枚举
实际上就是,不能定义其他的对象只能定义规定好了的对象。枚举类中定义的每一个对象都是唯一的。
摸弄枚举类的原理:
如下例子:
public abstract class WeekDay { private WeekDay(){}; public static WeekDay MON=new WeekDay(){ @Override public WeekDay nextDay() { // TODO Auto-generated method stub return SUN; }}; public static WeekDay SUN=new WeekDay(){ @Override public WeekDay nextDay() { // TODO Auto-generated method stub return MON; }}; public abstract WeekDay nextDay(); public String toString() { return (this==MON)?"MON":"SUN"; } } 测试类: public class Test1 { /** * @param args */ public static void main(String[] args) { // TODOAuto-generated method stub WeekDay weekday = WeekDay.MON; System.out.println(weekday.nextDay()); } }
下面是用枚举类模拟了一个交通灯:
代码如下:
public enumtrafficLamp
{
RED(30){
@Override
public trafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},
GREEN(45){
@Override
public trafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}},
YELLOW(10){
@Override
public trafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}};
public abstract trafficLamp nextLamp();
private int time;
private trafficLamp(int time)
{
this.time=time;
}
}
四、高级for循环
格式:for( 接受变量的类型 变量 : 待循环的变量 ){ }
注意:必须是Intertor的子类才可以使用高级for循环
在for循环体内中不能增删操作
示例代码:
import java.util.ArrayList;
import java.util.List;
public class ForDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list=new ArrayList<String>();
list.add("aaaaa");
list.add("bbbbb");
list.add("ccccc");
for(String s:list){//高级for循环
System.out.println(s);
}
}
}
运行结果:
aaaaa
bbbbb
ccccc
五、静态导入
importstatic java.lang.Math.*;//导入Math类中的所有方法
当你写类中的方法时,就不用写类名了。
示例代码:
import static com.demo.Change.*;//静态导入
public class StaticImport {
/**
* @param args
*/
public static void main(String[] args) {
// TODOAuto-generated method stub
change(3,4,6,2,7);
}
}
运行结果:3 4 6 2 7
六、泛型
其实就是限制一些数据的类型
泛型可以定义在类上,也可以定义在成员上。
当泛型定义在类上时,整个类的的类型都是一样的。
上限:<?>
ArrayList >
泛型中不存在继承关系:
ArrayList<Object>al=new ArrayList<String>();//错误
Vector<Integer> VectorList[]=new Vector<Integer>[10];//错误
Vector >
Vector<Object>>
泛型当编译完成后会去掉泛型的类型。
<?>通配符,当你不知道用什么类型时可以用?,也表示占位符。
通过反射技术来获取泛型的类型:
代码如下:
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Classclazz = Class.forName("lianxi.Test2");
Methodmethod = clazz.getMethod("get", List.class);
Type[] type =method.getGenericParameterTypes();
for(Type t:type)
{
System.out.println(t);
}
}
public static List<String> get(List<String> l)
{
return null;
}
}
总结:Jdk1.5h是jdk的一次历史性的变革,它里面新添加了许多的类和方法。学习和应用新的方法可以让代码更简单,也可以是代码更加优化;新事物的出现一定是它更好的解决老的事件。在学习新的方法时,我们也不能忘记或不学以前的方法,老的是基础,新的特性只是高于基础,但他也源于基础;只有学好基础才能更好的理解新特性,我们才有可能去创造新特性。