java学习笔记_高级篇必会(可变参数,枚举)

可变参数

l  测试JDK中具有可变参数的类Arrays.asList()方法。分别传多个参、传数组,传数组又传参的情况。

•    注意:传入基本数据类型数组的问题。

l  从JDK 5开始, Java 允许为方法定义长度可变的参数。语法:

                   publicvoid foo(int … args){

                   }

l  注意事项:

•    调用可变参数的方法时, 编译器将自动创建一个数组保存传递给方法的可变参数,因此,程序员可以在方法体中以数组的形式访问可变参数

•    可变参数只能处于参数列表的最后, 所以一个方法最多只能有一个长度可变的参数

 

@Test 

   public void testsum()

   {

      sum(1,2,3,5);

   }

    

   public void sum(int ...nums)

   {

      int sum=0;

      for(int s:nums)

      {

         sum+=s;

      }

      System.out.println(sum);

     

   }

 

 

//注意可变参数 可以这样写 public voidsum(int x,int …nums) 但是不可这样写public void sum(int ..nums,int x) 

//也可以传递数组

@Test

   public void testasList() {

      List list = Arrays.asList("1", "2", "3");

      System.out.println(list);

 

      String[] str = { "1", "2", "3", "4" };

      list = Arrays.asList(str);

      System.out.println(list);

 

      int[] i = { 1, 2, 3, 4, 5 };  

      list = Arrays.asList(i);

       System.out.println(list);//这种语法是错误的

       //aslist方法中只能放对象,不能放基本数据类型

       Integer[] it={1,1,2,3};

       list=Arrays.asList(it);

       System.out.println(list);

      

   }


枚举

l  为什么需要枚举?

•    一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。

l  JDK 5新增的enum 关键字用于定义一个枚举类。

 

public class Demo1 {

  

   public void test()

   {

      print(Grade.A);

   }

  

   public void print(Grade g)

   {

     

   }

}

 

enum Grade{  //相当于一个类

   A,B,C,D,E//相当于一个对象

}

 

­枚举的构造方法 ,字段和方法.

public class Demo2 {

    public static void main(String[] args) {

      Demo2 d=new Demo2();

      d.print(Grade1.A);

     

   }

    public void print(Grade1 g)

    {

      Stringstr=g.getValue();

      System.out.println(str);

    }

  

}

enum Grade1{

   A("100-80"),B("79-60"),C("59-0");

   String Value;

   private Grade1(String value)

   {

     this.Value=value;

   }

   public String getValue()

   {

      return this.Value;

   }

  

}

 

带抽象方法的枚举

import org.junit.*;

public class Demo1 {

    @Test

   public void test()

    {

      this.print(Grade.A);

    }

  

   public void print(Grade g)

   {

    String str=g.localGrade();

    System.out.println(str);

   }

}

enum Grade{

   A("100-90"){

 

      @Override

      public String localGrade() {

        return "";

       

      }

     

   }

   ,B("89-80"){

 

      @Override

      public String localGrade() {

        return "";

       

      }

     

   }

   ,C("79-70"){

 

      @Override

      public String localGrade() {

        return "一般";

       

      }

     

   }

   ,D("69-60"){

 

      @Override

      public String localGrade() {

        return "";

       

      }

     

   }

   ,E("59-0"){

 

      @Override

      public String localGrade() {

        return "不及格";

       

      }

     

   };

   String Value;

   private Grade(String value)

   {

      this.Value=value;

   }

   public String getValue()

   {

      return this.Value;

   }

   public abstract String localGrade();

}

 

 

//枚举的构造函数必须是私有的private

Enum 的常用方法

public void test2()

   {   String name= Grade.C.name();

       System.out.println(name);

      int range=Grade.C.ordinal();

      System.out.println(range);

      String str="C";

      Grade s=Grade.valueOf(str);

      System.out.println(s);

      Grade []gs=Grade.values();

      for(Grade g: gs)

      {

        System.out.println(g);

      }

   }

 

l  练习:请编写一个关于星期几的枚举WeekDay,要求:

•   枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun

该枚举要有一个方法,调用该方法返回中文格式的星期

public class Demo2 {

 

   public static void main(String[] args) {

      Demo2 d = new Demo2();

      d.print(Week.Mon);

   }

 

 

 

   @Test

   public void print(Week w) {

      w.p();

   }

 

}

 

enum Week {

   Mon {

      @Override

      public void p() {

        System.out.println("星期一");

      }

   },

   Tue {

      public void p() {

        System.out.println("星期二");

      }

   },

   Wed {

      public void p() {

        System.out.println("星期三");

      }

   },

   Thu {

      public void p() {

        System.out.println("星期四");

      }

   },

   Fri {

      public void p() {

        System.out.println("星期五");

      }

   },

   Sat {

      public void p() {

        System.out.println("星期六");

      }

   },

   Sun {

      public void p() {

        System.out.println("星期日");

      }

   };

 

   public abstract void p();

 

}


你可能感兴趣的:(java)