首页 > 代码库 > (14)jdk1.5开始的一些新特性:静态导入,增强for循环,可变参数,自动装箱/拆箱,枚举类型

(14)jdk1.5开始的一些新特性:静态导入,增强for循环,可变参数,自动装箱/拆箱,枚举类型

Jdk1.5新特性之静态导入

jdk1.5新特性值静态导入

静态导入的作用:简化缩写

静态导入的作用:可以作用一个类的所有静态成员。

静态导入的格式:import static 包名.类名.静态的成员

import static java.util.Collections.sort; //静态导入指定的某个静态成员方法

import static java.util.Collections.*;  导入所有的静态成员

除了可以导入静态的成员方法,也可以静态的导入成员变量,比如System.out就是一个典型的静态成员,每次都写那么多的System是多么的麻烦,可以向下面这样静态导入:

Import static java.lang.System.out; 以后输出的时候可以直接使用out

注意事项:如果本类中有个方法和静态导入的方法,完全一样的时候,那么本类的方法将将会覆盖静态导入的方法,这个简记为就近原则。如果需要使用静态导入的成员,需要在静态成员前面加上类名。

 

Jdk1.5新特性之增强for循环

 

Iterable

 

|——Collection 单例集合的跟接口

 

 之前说Collection是单例集合的根接口,其实上面还有一个超级接口Iterable,实现这个接口的主要目的为类拥有增强for循环的功能。

 

 

 

 jdk1.5新个性值增强for循环

 

 增强for循环的而作用:简化迭代器的书写格式。之所以这样说,事实上,增强for循环底层还是用迭代器实现的,所以,在增强for循环的过程中也是不能使用集合来修改元素的个数,慎之,慎之。

 

 增强for循环的适用范围:如果使用增强for循环必须要实现Iterable接口的对象或者是数组对象。

 

 增强for循环的格式:

 

  for(变量类型 变量类型 : 遍历的目标)

 

  {

 

  }

 

通过实例可以很明显的看出来,增强for循环就是比迭代器用起来更简便一些

 

增强for循环的注意事项:

 

1、增强for循环的底层也是使用了迭代器获取的,只不过获取迭代器是有jvm来完成的,不需要我们获取迭代器而已,所以在使用增强for循环的时候,不允许改变集合的元素的个数。

 

2、迭代器遍历元素与增强for循环遍历元素的区别是:使用迭代器遍历结合的元素时可以删除集合的元素,当我们使用增强for循环时是不能做增删操作的,因为增强for循环中维护的迭代器对象在jvm手中。

 

3、普通的for循环和增强for循环的区别:普通for循环不需要遍历的目标,但是增强for循环一定要有遍历的目标,有时相当是一宗对空间的浪费。到底使用哪种方式(普通foriterator,增强for),视实际情况

 

4、注意了,注意Map集合没有实现Iterable接口,所以不能直接使用增强for循环,如果要使用增强for循环要现借助于Collection的集合,先取出到Set

 

Jdk1.5新特性之 可变参数

 

可变参数格式:

 

数据类型... 变量名

 

 

 

可变参数需要注意的细节:

 

1、如果一个函数的形参使用了可变参数之后,那么调用该方法的时候可以传递参数也可以不传递参数。

 

2、可变参数实际上是一个数组对象

 

3、可变参数必须位于形参中的最后一个。

 

4、一个方法最多只能有一个可变参数,很明显参数列表只有一个最后位置。

 

Jdk1.5新特性之 自动装箱与自动拆箱

 

java是面向对象 的语言,任何事物都可以用类来解决,sun就使用了

 

一些描述java中八种基本数据类型的数据类型

 

基本数据类型 基本类型的包装类型

 

byte Byte

 

short Short

 

int Integer

 

long Long

 

 

 

float Float

 

double Double

 

 

 

boolean Boolean

 

 

 

char Character

 

 

 

基本数据类型对应包装类型的好处:

 

1、 包装类型,基本数据类型的数据也可以使用一些方法。

 

//整数变成字符串

 

System.out.println("整数转换成对应的字符串:"+Integer.toString(1));

 

 

 

//把整数转换成对应的禁止形式

 

System.out.println("转成二进制:"+Integer.toBinaryString(10));

 

System.out.println("十进制到八进制:"+Integer.toOctalString(10));

 

System.out.println("10到十六进制:"+Integer.toHexString(10));

 

 

 

//可以把字符串当成对应的禁止数据帮你转换

 

String data = "http://www.mamicode.com/10";

 

int a = Integer.parseInt(data, 11); //进制的范围最大不超过36

 

System.out.println("a = "+a);

 

 

 

//自动装箱:自动把java的基本数据类型的数据转成对象数据类型

 

int tmp = 10;

 

Integer b = tmp;

 

//自动拆箱:把引用类型的数据转换成基本类型的数据

 

Integer c = new Integer(13);

 

int d = c;

 

System.out.println(d);

 

 

 

//引用的数据类型

 

Integer e = 127;

 

Integer f = 128;

 

System.out.println("e == f:"+(e==f)); syso true

 

//Integer类内部维护了一个缓冲数组存储了-128~+127这些数据在一个数组中,如果你获取的数据失落在这个范围之内的,

 

//就直接从该缓冲区内获取对应的数据 这个完全可以查看Integer的源码

 

 

 

Jdk1.5新特性之枚举类型

有关枚举可以参见另一篇文章,讲的很详细,地址:http://www.cnblogs.com/OliverZhang/p/6003178.html

 

说说从网上和javacore上看的有关枚举的一句经典的介绍,你看 enum Sez{man, woman;}就这么简简单单的一句都做了写什么呢?在java类库中存在这么一个类Enum这个类叫做枚举类,一旦使用enum关键字修饰Sex,那么Sex就变成了Enum的子类......

 

问题:某些方法所接受的数据必须是在固定范围之内的。

 

解决方案:自定义一个类,然后是私有化函数,在自定义类中创建类的对象。

 

Jdk1.5之后对以上问题提供了新的解决方案。

 

枚舉解決的問題:一些方法在運行時,他需要的數據不是任意的,而是在一定的範圍內的。

 

 

 

枚舉類的定義格式:

 

 

 

enum 類名

 

{

 

}

 

 

 

枚舉要注意的細節:(結合反編譯 javap -c -l -private Sex

 

1、枚舉也是一個特殊的類

 

2、枚舉值默認的修飾符是public static final day19.Sex man;

 

3、枚舉值所屬的類的數據類型,枚舉值是指向了本類的對象。本例中是一個Sex型的。

 

4、枚举类的构造方法默认是private型的。

 

5、枚举类可以定义自己的成员变量与成员函数。

 

6、枚举类可以自定义构造函数,但是构造函数的修饰符必须是private

 

7、枚举类可以存在抽象的方法,但是枚举值必须要实现抽象的方法。

 

8、枚举值必须要位于枚举类的第一个语句,否则报错。

 

枚举使用的范围:

 

方向,性别,季节,星期,尺码,,,,,,

 

switch 语句适用的数据类型:bytecharshortintString、枚举

 

 

 

注意:case语句后面的枚举值,只需要但写枚举值,不要声明这个枚举值属于哪个枚举类,否则报错。为什么呢?1因为在进switch(season)

 

语句的时候,这个时候就已经判断了枚举类型,2你不小心可能会传入别的枚举值比如Sex.man

 

(14)jdk1.5开始的一些新特性:静态导入,增强for循环,可变参数,自动装箱/拆箱,枚举类型