首页 > 其他 > 详细

黑马程序员_java基础笔记(10)...JDK1.5的新特性

时间:2014-02-15 12:41:23      阅读:424      评论:0      收藏:0      [点我收藏+]

 ---------------------- ASP.Net+Android+IOS开发.Net培训期待与您交流! ---------------------- 

1:静态导入。2:for-each循环。3:自动装包/拆包。4:可变参数。5:枚举。6:泛型

 

1,静态导入

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

2,for-each循环

语法:
for ( type 变量名:集合变量名 )  { … }
注意事项:
  迭代变量必须在( )中定义!
  集合变量可以是数组或实现了Iterable接口的集合类
举例:

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

  int sum = x;

  for(int arg:args) {

  sum += arg;

  }

  return sum;

  }

3,自动装箱/拆箱

自动装箱:
  Integer num1 = 12;
自动拆箱:
  System.out.println(num1 + 12);
基本数据类型的对象缓存:

  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

Flyweight(享元)模式是构造型模式之一,他通过与其他类似对象共享数据来减少内存占用。也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对象储存池(Flyweight Pool)来内存内部状态的对象。为了调用方便,FlyweightFactory类一般使用Singleton模式实现。Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度。

Flyweight模式的有效性很大程度上取决于如何使用它以及在何处使用它。当一下情况成立时使用Flyweight模式:1,一个应用程序使用了大量的对象。2.完全由于使用大量的对象,造成很大的储存开销。3,对象的大多数状态都可以变为外部状态。4,如果删除对象以外的状态那么可以用相对减少的共享对象取代很多组对象。5,应用程序不依赖于对象标识。

 

4,可变参数

 Overlead重载   Override重写

特点:

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

  ...位于参数类型和参数名之间,前后有无空格都可以

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

举例代码:

  public static void main(String[] args) {

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

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

  }

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

    int sum = x;

    for(int i=0;i<args.length;i++) {

      sum += args[i];

    }

    return sum;

  }

5,枚举 

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
 
用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。
  私有的构造方法
  每个元素分别用一个公有的静态成员变量表示
  可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
枚举的基本应用
  举例:定义一个Weekday的枚举。
  扩展:枚举类的values,valueOf,name,toString,ordinal等方法(记住,讲课时要先于自定义方法前介绍,讲课更流畅)
  总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,
例如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()。
举例星期:

public class EnumTest {

  public static void main(String[] args) {  

    WeekDay wd=WeekDay.Monday; //WeekDay相当于一个类了,     

    System.out.println(wd); //利用.来调用里面的对象     

    System.out.println(wd.ordinal()); //排序从0开始     

    System.out.println(WeekDay.valueOf("Sunday")); //利用枚举来调用静态方法     

    System.out.println(WeekDay.values().length); //values()就是所有元素组成的数组     

  }    

  public enum WeekDay{

    Sunday(0),Monday(1),Tuesday(2),Wednesday(3),Thursday(4),Friday(5),Saturday(6);    

    private WeekDay(){  //后面定义了构造函数后,枚举对象后必要有;             

    System.out.println("first");  //在使用类时,在第一处就要调用构造函数进行初始化         

  }      

  private WeekDay(int x){             

    System.out.println("second");  //对对象的初始化,在选择构造函数时要根据对象后面的参数形式         

  }      

  private WeekDay(int x,int y){             

    System.out.println("third");         

  }

}

枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
 
带构造方法的枚举
  构造方法必须定义成私有的
  如果有多个构造方法,该如何选择哪个构造方法?
  枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
带方法的枚举
  定义枚举TrafficLamp
  实现普通的next方法
  实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
  增加上表示时间的构造方法
枚举只有一个成员时,就可以作为一种单例的实现方式。
带有抽象方法的枚举
举例交通信号灯(TrafficLamp):

public class EnumTest {

  public static void main(String[] args) {    

    TraficLamp tl = TraficLamp.RED;     

    System.out.println(TraficLamp.RED.time);  //该灯需要的时间

  } 

  public enum TraficLamp{    
    RED(85){        
      public TraficLamp nextLamp(){           
        return GREEN;  
    } },    
    GREEN(99){        
      public TraficLamp nextLamp(){               
        return YELLOW;           
       } },    
    YELLOW(3){        
      public TraficLamp nextLamp(){               
        return RED;           
       } };    
    public abstract TraficLamp nextLamp();    
    private int time;    
    private TraficLamp(int time){        
      this.time=time;    
    }  
  }
}
 

6,泛型

 

 

 

 

 

 
    

 

---------------------- ASP.Net+Android+IOS开发.Net培训期待与您交流! ---------------------- 

 详细请查看:http://edu.csdn.net 

黑马程序员_java基础笔记(10)...JDK1.5的新特性

原文:http://www.cnblogs.com/In-order-to-tomorrow/p/3549228.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!