主要内容简介:静态导入;可变参数;增强FOR循环;基本数据类型的装箱和拆箱;枚举;
一、静态导入
import 可以导入一个类或者某个包中所有类。
import static可以导入某个类中所有静态方法,或者某个静态方法。
二、可变参数
1、问题的由来,如果一个类中的方法,接收的参数个数不固定,那么需要定义多个函数进行重载,为了避免这一局限,可变参数应运而生
2、可变参数的特点
...位于变量类型与变量名之间,前后有无空格都可以
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数
3、示例
传入不固定的参数个数,对其求和
publicstatic int add(int x,int ...args) {
intsum = x;
for(inti=0;i<args.length;i++) {
sum +=args[i];
}
returnsum;
}
三、增强FOR循环
1,语法
for(type变量名:集合变量名){}
2,特点
迭代变量必须在()中定义
集合变量可以是数组或实现了Iterable接口的集合类
3,示例
publicstatic int add(int x,int ...args) {
intsum = x;
for(intarg:args) {
sum +=args[i];
}
returnsum;
}
四,基本数据类型的装箱与拆箱
对于这个特性,有一种设计模式-----享元设计模式
对于一个基本数据类型的数据,可以自动的装箱为对应的包装类对象,对于包装类对象也可以自动的拆箱为基本数据类型
下面有个一注意点,这也体现了享元设计模式
Integeri1 =137 Integer i2 =137 Integer i3=116 Integer i4 =116
i1 = =i2 //false
i3 = =i4 //true
五,枚举
1,枚举的由来
枚举就是要让某个类型的变量取值只能为若干个固定值中的一个,否则,编译器会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值。
2,枚举的注意事项
枚举元素不论何时放在第一行,若后面有内容需要用分号隔开,构造方法需要私有。枚举中可以定义抽象方法。
可以把枚举看做是一个特殊的类,其中的每个元素都是实例对象。如果枚举中只有一个成员,可以作为一种单例的设计模式。
3,使用一般的类实现枚举
需求:演示星期一到星期日
abstract class WeekDay {
private WeekDay(){
}
public abstract WeekDay getNextDay();
public final static WeekDay SUN = new WeekDay(){
public WeekDay getNextDay(){
return MON;
}
};
public final static WeekDay MON = new WeekDay(){
public WeekDay getNextDay(){
return THU;
}
};
public final static WeekDay THU = new WeekDay(){
public WeekDay getNextDay(){
return WED;
}
};
public final static WeekDay WED = new WeekDay(){
public WeekDay getNextDay(){
return THR;
}
};
public final static WeekDay THR= new WeekDay(){
public WeekDay getNextDay(){
return FRI;
}
};
public final static WeekDay FRI = new WeekDay(){
public WeekDay getNextDay(){
return THS;
}
};
public final static WeekDay THS = new WeekDay(){
public WeekDay getNextDay(){
return SUN;
}
};
public String toString(){
if(this == SUN)
return "SUN";
else if(this == MON){
return "MON";
}else if(this == THU){
return "THU";
}else if(this == WED){
return "WED";
}else if(this == THR){
return "THR";
}else if(this == FRI){
return "FRI";
}else
return "THS";
}
}
4,使用枚举实现一个交通灯
public enum TrafficLamp{
RED(45){
public TrafficLamp getNextLamp(){
return GREEN;
}
},YELLOW(15){
public TrafficLamp getNextLamp(){
return RED;
}
},GREEN(30){
public TrafficLamp getNextLamp(){
return YELLOW;
}
};
private int time;
private TrafficLamp(int time){
this.time = time;
}
public abstract TrafficLamp getNextLamp();
public int getTime(){
return time;
}
}