论坛首页 入门技术论坛

corejava辅导(16--2)

浏览 1115 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-03   最后修改:2008-12-03

可变长的参数

java5.0中,可以使用一种变长参数,也就是例如m(String… s)的东西,编译器会自动的将方法调用时的参数适当的封装成数组

5.0之前

public class Test{

public static void main(String[] args){

}

}

JVM收到数据封装在数组里,然后传入方法

5.0之后

public class Test{

public static void main(String... s){

     m();//此时实际调用的是那个无参的m()方法

//注意:调用可变长参数的方法,只在必要时调用

         m(1,“abc”,”bcd”);

}

public static void m(){

     System.out.println(“m()”);

}

public static void m(int a,String… s){

for(String s2:s){

              System.out.println(s2+a);

}

}

}

注意:只在必要的时候进行。同时有参数为数组,就不能使用变长参数,有变长参数,就不能使用数组,不能共存。一个方法最多只能有一个变长参数,而且是最后一个参数

 

 格式化输出

 

格式化I/O(Formatted I/O)

java.util.Sacner类可以进行格式化的输入,可以使用控制台输入,结合了BufferedReaderStringTokenizer的功能。

 

增加了类似C的格式化输入输出,简单的例子:

 public class TestFormat{

  public static void main(String[] args){

         int a = 150000, b = 10;

         float c = 5.0101f, d = 3.14f;

         System.out.printf("%4d %4d%n", a, b);

         System.out.printf("%x %x%n", a, b);

         System.out.printf("%3.2f %1.1f%n", c, d);

         System.out.printf("%1.3e %1.3e%n", c, d*100);

    }

 }

 输出结果为:

 150000   10

 249f0 a

 5.01 3.1

 5.010e+00 3.140e+02

 

类型安全的枚举

 

枚举也是一个类型,枚举中的对象只能定义一次并在定义时给其初始化,定义之后不能再改变其值,只能从枚举中选择其一。

 

enum 枚举名{

     枚举值1(..),枚举值2(..).....;

}

 

5.0之前使用模式做出枚举

final class Season{

     public static final Season SPRING=new Season();

     public static final Season WINTER=new Season();

     public static final Season SUMMER=new Season();

public static final Season AUTUMN=new Season();

private Season(){}

}

完全等价于

enum Season2{

     SPRING(..),//枚举值

     SUMMER(..),

     AUTUMN(..),

     WINTER(..);

......

}

 

枚举是一个反射关联的典型,反射关联,即在类的定义中有自身类型的属性。

枚举本质上也是一个类,Enum是枚举的父类。

枚举中的values()方法会返回枚举中的所有枚举值

枚举中可以定义方法和属性,最后的一个枚举值要以分号和类定义分开,枚举中可以定义的构造方法。

枚举可以实现接口,枚举不能有子类也就是final的,枚举的构造方法是private(私有的),枚举中可以定义抽象方法,可以在枚举值的值中实现抽象方法,枚举值就是枚举的对象,枚举默认是final,枚举值可以隐含的匿名内部类来实现枚举中定义抽象方法。

 

枚举类(Enumeration Classes)和类一样,具有类所有特性。Season2的父类是java.lang.Enum;

 

隐含方法Season2[] ss=Season2.values();  每个枚举类型都有的方法。enum可以在switchcase语法中使用(不加类名)。

例:

switch( s ){

     case SPRING:

              …………….

     case SUMMER:

              …………….

     …………..

}

 枚举类可以写有参构造方法,注意这个构造方法的权限修饰符要是private即私有的,且枚举类的构造方法默认权限修饰符不是default而是private

enum Season2{

     SPRING(“”),

     SUMMER(“”),

     AUTUMN(“”),

     WINTER(“”);//注意这个分号,它代表枚举值结束

     private String name;

     Season2(String name){

         this.name=name;

}

String getName(){

     return name;

}

}

Season2.SPRING.getName()

 

枚举的高级用法:

 

枚举类中可以定义抽象方法,虽然枚举类是不能有子类的但是,枚举值可以覆盖枚举类中的定义的抽象方法。

例如下:

enum Operation{

     ADD{//可以在枚举之中覆盖抽象方法

         public double calculate(double s1,double s2){

              return s1+s2;

         }

     },

     SUBSTRACT{

         public double calculate(double s1,double s2){

              return s1-s2;

         }

     },

     MULTIPLY{

         public double calculate(double s1,double s2){

              return s1*s2;

         }

     }

     DIVIDE{

         public double calculate(double s1,double s2){

              return s1/s2;

         }

     }

     public abstract double calculate(double s1 ,double s2);//抽象方法

}

有抽象方法枚举元素必须实现该方法。

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics