1静态导入
import 语句可以导入一个类或某个包中的所有类
import static 语句导入一个类中的某个静态方法或所有静态方法
2可变参数
可变参数的特点
。只能出现在参数列表的最后
。调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的
形式访问可变参数
public int add(int x ,int ... args)
{
int sum = x ;
System.out.println(sum);
for(int i=0; i<args.length; i++)
{
sum += args[i];
}
return sum ;
}
3 增强for循环
for(类型名 变量名 :集合变量名){...}
注意:1)迭代变量必须在()中定义
2)集合变量可以是数组或实现了Iterable接口的集合类
4基本数据类型的自动拆箱与装箱
Integer i1 = 3 ; 与 Integer i3 = 128 ;
Integer i2 = 3 ; Integer i4 = 128 ; 之间的区别
当数值小于一个字节大小时(-128~127),自动装箱成对象会有一个缓存 在常量池
所有调用的引用都指向该常量池中的这个对象,当大于规定的数值时,引用就各自指向
堆内存中的对象。 (这是一种享元模式flyweight,实现一定的共享)
享元设计模式:如果很多很小的对象,它们有很多相同的东西,可以把它们封装成一个
对象,把不同的部分成外部的属性,作为方法的参数传入。
5枚举
public class WeekDay {
private WeekDay(){}
public final static WeekDay SUN = new WeekDay();
public final static WeekDay MON = new WeekDay();
public WeekDay nextDay(){
if(this == SUN)
return MON ;
else
return SUN ;
}
}
/*
当一个WeekDay对象获取下一天,可以用将nextDay方法定义成抽象方法,这样就可以将大量的if else语句转移成了一个个独立的类
就是内部类
*/
public abstract class WeekDay {
private WeekDay(){}
//将方法由内部的子类实现
public final static WeekDay SUN = new WeekDay(){
public WeekDay nextDay(){
return MON ;
}
};
public final static WeekDay MON = new WeekDay(){
public WeekDay nextDay(){
return SUN ;
}
};
public abstract WeekDay nextDay();//定义成抽象类
/* public WeekDay nextDay(){
if(this == SUN)
return MON ;
else
return SUN ;
}*/
public String toString(){
return this == SUN? "SUN":"MON";
}
}
enum WeekDay{SUN, MON,WED,THI,FRI,SAT} WeekDay相当于一个类,里面的内容是它类
的实例对象。
WeekDay weekday = WeekDay.SUN ; 枚举还实现它对象的了toString方法
System.out.println(weekday);打印结果是SUN
weekday.name() 对象名称
weekday.ordinal() 该对象在枚举类中的排列位数
枚举类的静态方法
WeekDay.valueOf("SUN") 根据字符串的内容返回枚举类的对象SUN
WeekDay[] WeekDay.values(); 获取枚举类都有对象装进数组中,可以用来遍历枚举类
带有构造方法的枚举
public enum WeekDay{
SUN(1), MON,WED,THI,FRI,SAT;
private WeekDay(){}
private WeekDay(int x){}
}
1) 构造函数必须位于枚举元素的后面 枚举元素最后加分号
2)当元素后加对应的(1)时,SUN元素的创建调用的是带参数的构造方法
带有抽象方法的枚举
public enum TrafficLamp {
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(40){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(4){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time ;
private TrafficLamp(int time){this.time = time ;}
}
/*
因为RED,GREEN,YELLOW都是TrafficLamp的实例对象,而TrafficLamp有抽象方法,所以抽象方法由它的子类去实现,上面是实现格式
抽象方法加构造方法.....
*/