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

JDK1.5新特性总结

2013-12-17 01:24 232 查看
一、静态导入(Static Imports)

    import语句可以导入一个类或是某个包中的所有类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。

    比如Math类提供了很多于数学运算的静态方法,通常情况下我们是以Math.abs();这样的方式来进行调用函数的。在JDK1.5之后,可以使用import static 语句导入一个类中的某个静态方法或是所有静态方法。这是JDK1.5的新特性之一。

例如:

    import static java.lang.Math.abs;在使用时就可以直接使用abs();函数。

    import static java.lang.Math.*; 就可以直接调用Math类中的所有静态方法。 

    要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。不过,过度使用这个特性也会一定程度上降低代码地可读性。

二、可变参数(Varargs) 

    可变参数使程序员可以声明一个接受可变数目参数的方法(类似于多个方法重载,只不过是可变参数提供一个方法实现多个方法的重载,变得只是方法其中的参数)。可变参数必须是函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象,

    util.write(obj1);

    util.write(obj1,obj2);

    util.write(obj1,obj2,obj3);

    …

    在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了

public void write(Object... objs)
{   
for (Object obj: objs)   
    <span style="white-space:pre">	</span>   System.out.println(obj);
}

 

可变参数特点:

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

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

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

三、增强FOR循环

    可以用增强for循环来对数组或者集合进行遍历

格式:

for(type 变量名: 集合变量名)

{

    ……..

}

注意事项:

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

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

例如:

voidprintAll(Collection objs) {

      for (Object obj : objs)

              System.out.println((TimerTask)o).getName());

}


这样写法比起普通的for循环更为简洁,更加具有可读性。通常命名时集合变量名在变量名上加”s”。 

四、自动装箱/拆箱及享元模式

1.自动拆箱/装箱大大方便了基本类型数据和它们包装类地使用。

    比如基本数据类型和基本数据类型包装类的转换。

    自动装包:基本类型自动转为包装类.(int --> Integer)

          如:Integernumb1 = 12;

    自动拆包:包装类自动转为基本类型.(Integer --> int)

          如:System.out.println(numb1+12);

2.享元模式

    将基本小的整数(小于128)缓存起来,在使用时,调用其对象。而大的数则会重新创建对象。

    例如:s1=127;

          S2=127;

          S1==s2;

          结果为true

          s1=135;

          S2=135;

          S1==s2;

          结果为false 

五、枚举类型(enmu) 

    枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

1.普通类如何实现枚举功能?

    定义一个Weekday的类来模拟枚举功能。

    (1)私有的构造方法;

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

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

2.枚举的基本应用

    枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,如果想在一个类中编写完各个枚举类和测试调用类,那么可以将枚举类定义成调用类的内部类。

    枚举就是系统封装好的一个类。枚举的构造函数必须放在元素类表之后,并且元素类表以“;”结束掉。此构造函数必须是私有的,如果调用指定带参构造函数,可以直接在相应元素后加参数。

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

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

    在使用时会调用相应参数类型和个数的构造方法。构造方法必须定义成私有的。

4.实现带抽象方法的枚举

    实现带抽象方法的枚举:每个元素分别是由枚举类的子类来生成的实例对象,这些子类对象采用类似内部类的方式进行定义。

 六、注解

     注解相当于一种标记,在程序中加了注解就等于打上了某种标记,没加则等于没有某种标记。javac编译器开发工具和其他应用程序可以用反射来了解类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包、类、字段、方法的参数以及局部变量上。

     java.lang包中提供最基本的annotation。

     java中三种最基本的注解

     1、@SuppressWarning(“deprecation”)--->压制警告

        SupressWarning是告知编译器或开发工具等提示指定的编译器警告;

       “deprecation”是告知具体的信息即方法已过时。

     2、@Deprecated--->提示成员等已经过时,不再推荐使用。

       源代码标记@Deprecated是在JDK1.5中作为内置的annotation引入的,用于表明类(class)、方法(method)、字段(field)已经不再推荐使用,并且在以后的JDK版本中可能将其删除,编译器在默认情况下检测到有此标记的时候会提示警告信息。

       例如:假定之前的某个类升级了,其中的某个方法已经过时了,不能够将过时的方法删除,因为可能会影响到调用此类的这个方法的某些程序,这是就可以通过在方法上加这个注解。

    3、@Override--->提示覆盖(父类方法)

       加上此注解,,可对自己类中的方法判断是否是要覆盖的父类的方法,典型的例子即在集合中覆盖equals(Object obj)方法,其中的参数类型必须是Object,才能被覆盖,若不是,加上此注解就会提示警告。

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