静态导入:
- 例:import static 类.*;
- 可以导入该类中所有的静态方法。
可变参数:
- 问题:一个方法接受的参数个数不固定
- 特点:
- 只能出现在参数列表的最后
- ...位于变量类型和变量名之间
- 调用含有可变参数的方法时,编译器为该可变参数隐含创建一个数组,方法体中以数组的形式访问可变参数
- 例: public static int add( int... args)
java5的增强for循环:
- 例:for(int arg:args)
基本数据类型的自动装箱与拆箱:
- Interger intObj = 3;【自动装箱】
- intObj + 12;【自动拆箱】
- 当数字在-128~127(一个字节)之间时使用享元设计模式,不用搞出很多个对象
枚举:
- 为什么要有枚举类?
- 枚举就是要让某个类型的变量的取值为若干个固定值中的一个,否则编译器报错
- 枚举可以让编译器编译时就控制源程序中的非法值
- 用普通类如何实现枚举功能?定义一个WeekDay来模拟枚举功能
- 私有的构造方法
- 每个元素分别用一个公有的静态成员变量表示
- 可以有若干公有方法或抽象方法。例如WeekDay中将nextDay()方法定义成抽象的,大量if-else语句就转化成一个个独立的子类(利用匿名内部类)
- 模拟枚举功能的WeekDay类:
测试类:public abstract class WeekDay { private WeekDay(){} //通过匿名内部类新建WeekDay子类对象: public static final WeekDay SUN = new WeekDay(){ @Override public WeekDay nextDay() { // TODO Auto-generated method stub return MON; } }; public static final WeekDay MON = new WeekDay(){ @Override public WeekDay nextDay() { // TODO Auto-generated method stub return SUN; } }; public String toString(){ return (this==SUN)?"SUN":"MON"; } public abstract WeekDay nextDay(); //抽象方法 }
public class EnumTest { public static void main(String[] args) { // TODO Auto-generated method stub WeekDay weekDay = WeekDay.MON; System.out.println(weekDay.nextDay()); } }
- 枚举的基本应用:
- 举例:定义一个WeekDay的枚举
- 扩展:枚举类的values, valueOf, name, toString, ordinal等方法
public class EnumTest { public static void main(String[] args) { // TODO Auto-generated method stub //测试WeekDay枚举以及其各种方法: WeekDay weekDay = WeekDay.SUN; System.out.println(weekDay); System.out.println(weekDay.name()); System.out.println(weekDay.ordinal()); //静态方法: System.out.println(WeekDay.valueOf("SUN")); System.out.println(WeekDay.values()); } //枚举 public enum WeekDay{ SUN,MON,TUE,WED,THU,FRI,SAT; } }
- 枚举相当于一个类,可以定义构造方法、成员变量、普通方法和抽象方法
public class EnumTest { public static void main(String[] args) { // TODO Auto-generated method stub TrafficLight trafficLight = TrafficLight.Yellow; System.out.println(trafficLight.nextLight()); } public enum TrafficLight{ Red(30){ public TrafficLight nextLight(){ return Green; } }, Yellow(5){ public TrafficLight nextLight(){ return Red; } }, Green(35){ public TrafficLight nextLight(){ return Yellow; } }; //成员变量 private int time; //带参数的构造方法 private TrafficLight(int time){ this.time = time; } //抽象方法 public abstract TrafficLight nextLight(); } }
- 枚举的元素必须位于枚举体中最开始的部分,枚举元素成员列表后要有分号与其他成员分隔
- 枚举只有一个元素时,可以作为一种单例实现方式