黑马程序员_高新技术1(高级for,静态导入,可变参数,自动装箱拆箱,枚举)

------- android培训java培训、期待与您交流! ----------

一.java5的静态导入


1.import与import static语句的区别:

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

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


例:

import  java.lang.*   一般的是导入一个包中的类。

import  static  java.lang.Math. max;  导入Math类中的max静态方法。

import static java.lang.Math.*; 导入Math类中的所有静态方法。



二.可变参数Varibleparameter

1.可变参数

  1)问题:一个方法接受的参数个数不固定,例如:

   System.out.println(add(2,3,5));

   System.out.println(add(1,2,3,5));

  2)可变参数的特点:

  <1>只能出现在参数列表的最后;

  <2>...位于变量类型和变量名之间,前后有无空格都可以;

  <3>调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,

     在方法体中以数组的形式访问可变参数。


三.java5的增强for循环


1.增强for循环

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

  2)注意事项:

   迭代变量必须在()中定义!

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

  3)举例:

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

  {

   int sum = x;

   for(int arg : args)

   {

    sum += arg;

   }

   return sum;

  }



四基本数据的自动拆装箱及享元设计模式

1.基本数据类型的自动拆箱与装箱

  1)自动装箱:

   Integer num1 = 12;

  2)自动拆箱:

   System.out.println(num1 + 12);

  3)基本数据类型的对象缓存:

  Integer num1 = 12;

  Integer num2 = 12;

  System.out.println(num1 == num2);true


  Integer num3 = 129;

  Integer num4 = 129;

  System.out.println(num3 == num4);false


  Integer num5 = Integer.valueOf(12);

  Integer num6 = Integer.valueOf(12);

  System.out.println(num5 == num6); true;


 2.JDK1.4以前的版本基本数据封装对象:Integer a = new Integer(3);//装箱

   JDK1.5以后基本数据的封装对象:Integer a = 3;//自动装箱

   在一字节内的整数(-128~127)由于使用频率高,在封装成对象时,就缓存起来了。

   以便复用,这种模式叫享元模式。


 3.享元设计模式(flyweight):

   如果很多很小的对象,它们有很多相同的东西,那就可以把它们变成一个对象,

   还有些不同的东西,可将它们变成外部的属性作为方法的参数传入。这种模式叫

   享元模式。


五.枚举类

 1.为什么要有枚举,枚举的作用,

  1)问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能

     会写成 int weekday = 0;

  2)枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。

  枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。


 2.用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。

  1)私有的构造方法。

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

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

     采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。

 3.java5的枚举的基本应用

  1. public class EnumTest   
  2. {  
  3.  public static void main(String[] args)  
  4.  {  
  5.   WeekDay weekDay2 = WeekDay.FRI;  
  6.   System.out.println(weekDay2);  
  7.   System.out.println(weekDay2.name());  
  8.   System.out.println(weekDay2.ordinal());  
  9.   System.out.println(WeekDay.valueOf("SAT"));  
  10.   System.out.println(WeekDay.values().length);  
  11.  }  
  12.   
  13.  public enum WeekDay  
  14.  {  
  15.   SUN,MON,TUE,WEd,THI,FRI,SAT;  
  16.   }  
  17.  }  



4.实现带有构造方法的枚举

 

  1. <span style="font-size:18px;">public class EnumTest   
  2.  {  
  3.   public static void main(String[] args)  
  4.   {  
  5.    WeekDay weekDay2 = WeekDay.FRI;  
  6.    System.out.println(weekDay2);  
  7.    System.out.println(weekDay2.name());  
  8.    System.out.println(weekDay2.ordinal());  
  9.    System.out.println(WeekDay.valueOf("SAT"));  
  10.    System.out.println(WeekDay.values().length);  
  11.   }  
  12.    
  13.   public enum WeekDay  
  14.   {  
  15.    SUN,MON,TUE,WEd,THI,FRI,SAT;//元素列表后有内容时,要加;   
  16.    private WeekDay()//构造方法要私有  
  17.    {  
  18.     System.out.println("first");  
  19.    }  
  20.    private WeekDay(int day)  
  21.    {  
  22.     System.out.println("second");  
  23.    }  
  24.   }  
  25.  }</span>  


5.实现带有抽象方法的枚举

  1)枚举就相当于一个类,其中也可以定义构造方法,成员变量,普通方法和抽象方法。

  2)枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。

  把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

  3)带构造方法的枚举

  构造方法必须定义成私有的

  如果有多个构造方法,该如何选择哪个构造方法?

  枚举元素MON和MON()的效果一样,都是调用默认的构造方法。

  4)带方法的枚举

  定义枚举TrafficLamp

  实现普通的next方法

  实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用

  类似内部类的方式进行定义。

  增加上表示时间的构造方法

  5)枚举只有一个成员时,就可以作为一种单例的实现方式。

   

  1. <span style="font-size:18px;">class Single  
  2. {  
  3.      private Single(){}  
  4.      public final static Single s = new Single();  
  5.      public static  Single getInstance(){  
  6.     return s;  
  7.     }  
  8. }  
  9.   
  10. //枚举  
  11. public enum Single{  
  12.         S;  
  13. }  
  14. </span>  

 6)代码演示:

    1. <span style="font-size:18px;"public enum TrafficLamp  
    2.  {  
    3.   RED(30)  
    4.   {  
    5.    public TrafficLamp nextLamp()  
    6.    {  
    7.     return GREEN;  
    8.    }  
    9.   },  
    10.   GREEN(45)  
    11.   {  
    12.    public TrafficLamp nextLamp()  
    13.    {  
    14.     return YELLOW;  
    15.    }  
    16.   },  
    17.   YELLOW(5)  
    18.   {  
    19.    public TrafficLamp nextLamp()  
    20.    {  
    21.     return RED;  
    22.    }  
    23.   };  
    24.   public abstract TrafficLamp nextLamp();  
    25.   private int time;  
    26.   private TrafficLamp(int time)  
    27.   {  
    28.    this.time = time;  
    29.   }  
    30.  }  
    31. }</span> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值