新特性小知识

来源:互联网 发布:云计算的上市公司 编辑:程序博客网 时间:2024/04/30 09:39

枚举:jdk1.5以后的新特性

枚举就是让某个类型的变量的取值只能为若干个固定值中的一个,否则编译就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

用普通类如何实现枚举功能,定义一个weekday的类来模拟枚举功能

//weekday星期日用0表示,星期六用6表示,星期日是每个星期的第一天

1·私有构造方法

2·每个元素分别用一个公有的静态成员变量表示

3·可以有若干公有方法或抽象方法

  public abstract class WeekDay {  private WeekDay(){}  public final static WeekDay SUN=new WeekDay(){public WeekDay nextDay() {// TODO Auto-generated method stubreturn MON;}};  public final static WeekDay MON=new WeekDay(){public WeekDay nextDay() {// TODO Auto-generated method stubreturn SUN;}};    public abstract WeekDay nextDay();  /*public WeekDay nextDay(){  if(this==SUN){  return MON;  }else {return SUN;}  } */  public String toString(){  return this==SUN?"SUN":"MON";  }

1)枚举就相当于一个类,其中也可以定义构造方法,变量成员,普通方法和抽象方法。

2枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔,把枚举中的成员方法或变量放在枚举元素的前面,编译器会报错。

(3)构造方法必须私有化


带构造方法的枚举

1、构造方法必须定义成私有的

2、如果有多个构造方法,在元素后面加括号选择构造方法

例子:

  public enum WeekDay{SUN(1),MON(),TUE,WED,THI,FRI,SAT;private WeekDay   (){System.out.println("1");}private WeekDay(int day){System.out.println("2");}}

3、枚举元素MON()MON的效果一样,都是调用默认的构造方法。


实现带有抽象方法的枚举

  public enum TrafficLamp{RED(30){@Overridepublic TrafficLamp nextLamp() {// TODO Auto-generated method stubreturn GREEN;}},GREEN(45){@Overridepublic TrafficLamp nextLamp() {// TODO Auto-generated method stubreturn YELLOW;}},YELLOW(5){@Overridepublic TrafficLamp nextLamp() {// TODO Auto-generated method stubreturn RED;}};public abstract TrafficLamp nextLamp();private int time;private TrafficLamp(int time){this.time=time;}}

    枚举只有一个成员时,就可以作为一种单例的实现方式。

  • 静态导入(导入后不用 类.方法,只用方法名) 1.5以后

Import 语句可以导入一个类或某个包中的所有类

Import static 语句可以导入一个类中的某个静态方法或所有静态方法

  •  Overload override的区别

重载:只有返回值不同,不行(同名方法,参数不同)

重写(覆盖):其他类以及实现的类

  • 可变参数(只能出现在列表的最后)

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

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

例:function(int x , int… args)

  • 增强for循环

格式:for( (可加修饰)type 变量名:集合变量名){…}

注意:迭代变量必须在()中定义。

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

  • 自动装箱与自动拆箱 1.5

享元模式 flyweight  有很多个小的对象,有很多属性相同,把它们变成一个对象,不同的属性变成方法的参数(外部状态),那些相同的属性称为这个对象的内部状态。

Ineteger  i1=12;Ineteger  i2=12;  System.out.println(i1==i2);  //true//在一个字节类内(-128~127)小的整数在装箱的时候装成同一个对象Ineteger  i3=128;Ineteger  i4=128; System.out.println(i3==i4);//falseInteger i5= Integer.valueOf(3);Integer i6 = Integer.valueOf(3);System.out.println(i5==i6);//true


原创粉丝点击