新特性小知识

枚举: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 stub
			return MON;
		}};
	  public final static WeekDay MON=new WeekDay(){

		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			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";
	  }

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){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return GREEN;
			}
			
		},
		GREEN(45){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return YELLOW;
			}
			
		},
		YELLOW(5){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return 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);
//false
Integer i5= Integer.valueOf(3);
Integer i6 = Integer.valueOf(3);
System.out.println(i5==i6);
//true


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值