您的位置:首页 > 编程语言 > Java开发

黑马程序员_java高新技术_JDK1.5新特性

2014-04-07 19:29 555 查看
-------
android培训、java培训、期待与您交流! ----------

可变参数

在程序编写过程中,一个方法可能会接收若干个参数,参数个数是不确定的,通常会使用重载的方法,定义出多个方法名相同,参数列表不同,实现相同的功能,JDK 1.5 提供了方法的可变参数特性,在参数个数不确定时,通过可变参数方法实现函数功能,避免了因重载列出大量的相同方法。
可变参数的特点
只能出现在参数列表的最后

。。。位于变量类型和变量名之间,前后有无空格都可以

调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数

可变参数的使用示例
public class VarableParameter
{
public static void main(String[] args)
{
System.out.println(add(2,3,5));
System.out.println(add(2,1,3,5));//调用可变参数方法,传入不同个数int型参数

}
public static int add(int x,int... args)//可变参数位于参数列表的最后面
{
int sum=x;
for(int i=0;i<args.length;i++)
{
sum+=args[i];

}
return sum;
}

}
for循环增强

语法:for(type 变量名:集合变量名){...}

注意事项:

迭代变量必须在()中定义

集合变量可以是数组或者实现了Iterable接口的集合类

基本数据类型的自动拆箱与装箱

自动装箱:

Integer i1=12;//将基本数据类型int型的12自动装箱成Integer 对象

自动拆箱:

Integer i2+13;// 将Integer 类型的i2 对象 自动拆箱成int 型 与13相加,相加后的结果再自动装箱成Integer对象

享元模式 flyweigth

当对象很小,数值不变使用频率又很高,就创建一个对象 

当有很多很小的对象,他们有很多相同的属性那么就将它变成一个对象,将不同的部分变成外部属性作为方法的参数传入

Integer i3=15;

Integer i4=15;

i3==i4 结果为true 

Integer i5=129

Integer i6=129

i5==i6 结果为false 

i7=Integer.valueOf(12);同理//返回int 的Integer实例 

i8=Integer.valueOf(12);

在装箱时如果数字在一个字节之内(-128~127),就会放在一个缓存池,当再次创建该对象时就不在开辟空间,而是直接在缓存池中取出数据,节省内存空间。

枚举
C语言中有枚举

枚举:类中定义的变量的值只能是类中规定的值,这个变量是类类型的变量,每一个枚举都是一个对象

为什么要有枚举

枚举就是让某个类型的变量的取值只能为若干个固定类型中的一个,否则编译器就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通方式在开发时无法实现这一目标。
定义一个WeekDay类来模拟枚举的功能
每个元素分别用一个共有的静态成员变量表示

可以有若干共有方法或抽象方法,例如,要提供的getNextDay 方法必须是抽象的采用抽象方法定义getNextDay 就将大量的if else 语句转移成了一个个独立的类
public abstract class WeekDay {
private WeekDay(){}
public  static final WeekDay  Mon=new WeekDay(){
//内部类
public  String getNextDay()
{
return "Tue";
}
};
public final static  WeekDay Tue=new WeekDay(){
public  String getNextDay()
{
return "Thu";
}
};
public final static  WeekDay  Thu=new WeekDay(){
public  String getNextDay()
{
return "For";
}
};
public final static  WeekDay  For=new WeekDay(){
public  String getNextDay()
{
return "Fri";
}
};
public final static  WeekDay Fri=new WeekDay(){
public  String getNextDay()
{
return "Sat";
}
};
public final static  WeekDay Sat=new WeekDay(){
public  String getNextDay()
{
return "Sun";
}
};
public final static  WeekDay Sun=new WeekDay(){
public  String getNextDay()
{
return "Mon";
}
};
public abstract String getNextDay();//抽象方法类也标记成抽象的

}
package cn.heima.day1;

public class EnumTest {
public static void main(String[] args) {
WeekDay weekday=WeekDay.Tue;
System.out.println(weekday.getNextDay());
}

}
枚举的类用enum 关键字
枚举相当于一个类,枚举中的元素相当于类
枚举自动的将类提供了toString 方法,
提供了name,ordinal,compareTo,valueOf,values (返回数组)

枚举只有一个元素时可以作为是一种单例的实现方式

实现带有抽象方法的枚举
public enum TrafficLamp//带有抽象方法的枚举
{
RED(30){
public  TrafficLamp nextLamp()
{
return GREEN;
}
},
YELLOW(5){
public  TrafficLamp nextLamp()
{
return RED;
}
},
GREEN(45){
public  TrafficLamp nextLamp()
{
return YELLOW;
}

};
public abstract TrafficLamp nextLamp();//构造方法
private int time;
private TrafficLamp(int time){}//构造方法是私有的

}


-------
android培训、java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐