首页 > 代码库 > JDK5特性

JDK5特性

静态导入(了解)

JDK 1.5 增加的静态导入语法用于导入类的某个静态属性或方法。使用静态导入可以简化程序对类静态属性和方法的调用。

语法:

import static 包名.类名.静态属性|静态方法|*

例如:

import static java.lang.System.out

import static java.lang.Math.*

技术分享
 1 import static java.lang.System.out; 2 import static java.lang.Math.*; 3  4 public class Demo { 5  6     public static void main(String[] args) { 7         // 普通写法 8         System.out.println("hello world"); 9         int max = Math.max(100, 200);10         System.out.println(max);11 12         // 静态导入13         out.println("hello world");14         int max2 = max(100, 200);15         System.out.println(max2);16     }17     18 }
View Code

增强for循环

引入增强for循环的原因:在JDK5以前的版本中,遍历数组或集合中的元素,需先获得数组的长度或集合的迭代器,比较麻烦!

因此JDK5中定义了一种新的语法——增强for循环,以简化此类操作。增强for循环只能用在数组、或实现Iterable接口的集合类

语法格式: 

for(变量类型 变量 :需迭代的数组或集合){}

For each是为了让你的代码变得简捷、和容易维护。

 

增强for循环要注意的细节:

    1. 迭代器可以对遍历的元素进行操作,使用增强for循环时,不能对集合中的元素进行操作的。

2. 增加for循环与普通的for循环区别。

3. map的遍历。

For each是为了让你的代码变得简捷、和容易维护。

 

增强for循环要注意的细节:

    1. 迭代器可以对遍历的元素进行操作,使用增强for循环时,不能对集合中的元素进行操作的。

2. 增加for循环与普通的for循环区别。

3. map的遍历。

 

可变参数

JDK中具有可变参数的类Arrays.asList()方法。

分别传多个参、传数组,传数组又传参的情况。

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

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

语法:数据类型…变量名。

可变长参数是Object[] 数组。(可变参数里存的是对象数组)

JDK中的典型应用:

     Arrays.asList(T…a)是jdk中的典型应用。

需求:对若干个整数进行求和

public static int sum1(int a,int b ) {        return a+b;    }
可变参数的细节声明:        在一个方法中,最多只能有一个可变参数。        可变参数只能放在参数列表的最后面。    调用:        当使用可变参数时,可以传0或多个参数。        当使用可变参数时,也可以传一个数组进去,就表示多个参数。    使用:        在方法内部使用时,就是在使用一个数组。        当调用时没有传参数时(传了0个),这时在方法内部的参数数组是有值的(不为null),但长度为0.

自动装箱/拆箱

自动装箱:指开发人员可以把一个基本数据类型直接赋给对应的包装类。

自动拆箱:指开发人员可以把一个包装类对象直接赋给对应的基本数据类型。

典型应用:

    List list = new ArrayList();

    list.add(1);

    //list.add(new Integer(1));

    int i=list.get(0);

    //int j = (Integer)list.get(0);

 

基本数据类型包装类

技术分享

为了使得java的基本类型有更多的功能,java为其所有的基本类型提供了包装类来封装常见的功能。如:最大值、数值转换等。

将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据

所属的包:java.lang.*

 

常见应用一:

获取最大最小值MAX_VALUE / MIN_VALUE

整数类型最大值

Integer.MAX_VALUE

System.out.println(Integer.MIN_VALUE);// -2147483648

System.out.println(Integer.MAX_VALUE);// 2147483647

 

应用二:

基本数据类型和字符串之间的转换

例:Integer的parseInt方法,intValue方法

 

基本数据类型转换成字符串:

1:基本数据类型+””

2:基本数据类型.toString(基本数据类型值);

例如  Integer.toString(34); //将34变成了”34”

基本数据类型转字符串

int i=100; String str=100+""; String string = Integer.toString(100);

字符串变基本数据类型

基本数据类型 a=基本数据类型包装类.parse基本数据类型(String str);

str="123";int parseInt = Integer.parseInt(str);System.out.println(parseInt);

注意: 

public static int parseInt(String s)

Integer类中的parseInt方法是静态的 参数必须是数字格式

应用三:

进制转换:

 十进制转成其他进制.

toBinaryString(int i)           以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。 toHexString(int i)           以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。 toOctalString(int i)           以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。 那么其他进制转成十进制parseInt(String radix);parseInt(String s, int radix)           使用第二个参数指定的基数,将字符串参数解析为有符号的整数。 

JDK5.0后出现了自动装箱和拆箱

JDK5.0以后,简化了定义方式。

Integer x = new Integer(5);//装箱        int intValue = http://www.mamicode.com/x.intValue(); //拆箱        // 5.0简化书写        // 自动装箱。new Integer(5);        Integer y = 5;          // 对象加整数,x 进行了自动拆箱,变成了int 型 和5进行加法运算后再将和进行装箱赋给x。        y = y + 5; // 是通过Integer.intValue() 方法进行拆箱

枚举类

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

例如: 交通灯(红、黄、绿)    性别(男、女)   星期(星期一、二、三…..)

     分数等级(A、B、C、D、E)

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

枚举的实现

使用enum定义枚举类

在枚举类中定义枚举值(大写)

enum Gender {    MALE, FEMALE;}

使用javap命令

技术分享

发现其中每一个枚举值都是枚举类的具体实例对象.只不过是静态常量.

枚举类具有如下特性:

枚举类也是一种特殊形式的Java类。

枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数.

技术分享
 1 public class Demo1 { 2     public static void main(String[] args) { 3         Gender male = Gender.MALE; 4         System.out.println(male.getInfo()); 5     } 6 } 7  8 enum Gender { 9     MALE("男"), FEMALE;10 11     // 成员变量12     private String info;13 14     // 构造函数15     private Gender() {16 17     }18 19     private Gender(String info) {20         this.info = info;21     }22 23     // 成员方法24     public String getInfo() {25         return info;26     }27 28 }
View Code

枚举类可以声明抽象方法,但是要有具体的枚举值去实现.

 

技术分享
 1 public class Demo1 { 2     public static void main(String[] args) { 3         Gender male = Gender.MALE; 4         System.out.println(male.getInfo()); 5         male.speak(); 6     } 7 } 8  9 enum Gender {10     MALE("男") {11         @Override12         public void speak() {13             System.out.println("是男人");14         }15     },16     FEMALE {17         @Override18         public void speak() {19             System.out.println("是女人");20         }21     };22 23     // 成员变量24     private String info;25 26     // 构造函数27     private Gender() {28 29     }30 31     private Gender(String info) {32         this.info = info;33     }34 35     // 成员方法36     public String getInfo() {37         return info;38     }39 40     public abstract void speak();41 42 }
View Code

枚举类也可以实现接口(序列化)、或继承抽象类。

JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型(enum)。

技术分享
 1 public class Demo2 { 2     public static void main(String[] args) { 3         WeekDay mon = WeekDay.MON; 4         switch (mon) { 5         case MON: 6             System.out.println("星期一要上班..."); 7             break; 8         case TUE: 9             System.out.println("星期二,继续上班...");10             break;11         }12     }13 }14 15 enum WeekDay {16     MON, TUE, WED, THU, FRI, SAT, SUN;17 }
View Code

 

 

JDK5特性