您的位置:首页 > 编程语言 > Java开发

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

2013-06-04 08:25 411 查看
枚举

 为什么要有枚举,例如
要定义星期几变量,该怎么定义呢,假设用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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java