Java高新技术-jdk1.5简单的新特性

枚举

 为什么要有枚举,例如 要定义星期几变量,该怎么定义呢,假设用1-7分别代表星期一到星期日,但有人可能会用0代表星期日

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

定义一个WeekDay的类来模拟枚举功能

   1) 私有的构造方法

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

   3) 可以有若干公有方法或抽象方法,要提供给nextDay方法必须是抽象的

public abstract class Weekday {
 private Weekday(){}
 public final static Weekday SUM=new Weekday(){
  public Weekday nextDay() {
   return MON;
  }
 };
 public final static Weekday MON=new Weekday(){
  public Weekday nextDay() {
   return SUM;
  }
 };
 public abstract Weekday nextDay();

 public String toString()
 {
  return this==SUM?"SUM=====":"MOU+++";
 }
}

--------------------------------------------------------------------

枚举的静态方法

    WeekDay.valueOf("SUN").toString(); // valueOf("s");将字符串s变成(WeekDay中)SUN对象

    WeekDay.values().length;  //vlaues //将WeekDay中所有的对象封装成一个数组,进行遍历

     方法

     Weekday1.name(); 返回该对象的名字

    Weekday1.ordinal(); 返回该对象在该类中的排行第几

    compareTo       hashCode  equals    toString 直接调用,

-------------------------------------------------------------------------

构造参数的枚举   : MOU 构造方法是bbbbbbb,  SUM 和TOW构造方法是aaaaaa

public enum Enum_2 {
 MOU(2),SUM(),TOW;
 private Enum_2()
 {
  System.out.println("aaaaaaaaa");
 }
 private Enum_2(int day)
 {
  System.out.println("bbbbbbbbbbbbbbbbbb");
 }
}

------------------------------------------------------------

交通灯的枚举类

public enum TrafficLamp {
     HONG(30){
      public TrafficLamp nextLamp()
      {
       return LV;
      }
     },
     LV(35){
      public TrafficLamp nextLamp()
      {
       return HUANG;
      }
     },
     HUANG(5){
      public TrafficLamp nextLamp()
      {
       return HONG;
      }
     };
     private TrafficLamp(int time)
     {
      this.time=time;
     }
     public abstract TrafficLamp nextLamp();
     private int time;
}

如果枚举只有一个对象:  那么就可以作为一种单利的实现方式

 

 

 

===================================================================================================================================

 

自动拆装箱

自动装箱 Integer sum= 2;

自动拆箱 System.out.println(sum+12);

Integer i1=12; Integer i1=12; i1==i2 ture

Integer i3=new Integer(14); Integer i4=new Integer(14); i3==i4 ture

当Integer取值在一个字节之间时(-128到127),将这些数据比较常用,在内存中只有一份(共享),不用每一个对象new出一个,节省大量的内存空间,这种模式被称为 享元模式

 

 

 

1 静态导入

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

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

以Math类为例:

     import static java.lang.Math.max; //导入lang包中的Math类的max方法

      max(3,5); //就可以直接写方法名,不用类名也能调用

      Math.abs(6,3);  //平常调用的方式

     import static java.lang.Math.*;  //导入lang包中的Math类中的所有方法

        那么就是在本类页面中写Math的静态方法,都可以直接写方法名(没有类名也可以调用)

---------------------------------------------------------------------------------------

2 可变参数

   可变参数的特点

      (1)  只能出现在参数列表的最后

      (2)  ...位于变量类型和变量名之间,前后有无空格都是可以的

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

 public static void main(String[] args)
 {

 System.out.println(add(3,4));
System.out.println(add(2,4,5,66));
  System.out.println(addd(3,4));
  System.out.println(addd(2,4,5,66));
 }
 public static int addd(int ...is)   //可变参数
 {
  int sum=0;
  for(int i=0;i
  {
   sum+=is[i];
  }
  return sum;
 }
 public static int add(int s,int ...is)  // 可变参数
 {
  int sum=s;
  for(int i=0;i
  {
   sum+=is[i];
  }
  return sum;
 }

-------------------------------------------------------------------------------------------

3 for循环增强

  语法  :for(type 变量名: 集合变量名){....}

  注意事项

        迭代变量必须在{} 中定义

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

  举例

  public static int add(int x,int ... args)

{

    int sum =x;

    for(int arg:args)

    { 

          sun+=arg; 

     }

     return sum;

    

for循环增强的好处

在上面这个例子 增强型的for循环 和普通for循环一样
增强型的for循环 优点主要体现在集合中,随便举个例子
比如对 set 的遍历
一般是迭代遍历:
Set set = new HashSet();
Iterator it = set.iterator();
while (it.hasNext()) {
  String str = it.next();
  System.out.println(str);
}
for循环遍历:
for (String str : set) {
      System.out.println(str);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值