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

黑马程序员_高新技术之Java-JDK1.5新特性

2014-06-12 23:19 441 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

JDK1.5一个重要主题就是通过新增一些特性来简化开发,这些特性包括泛型,for-each 循环,自动拆装箱,枚举,可变参数。使用这些特性有助于我们编写更加清晰,精悍,安全的代码。

一、泛型

在Java中能使用到泛型的多是容器类,如各种list map set,因为Java是单根继承,所以容器里边可以放的内容是任何Object,所以从意义上讲原本的设计才是泛型。但用过Java的人是否感觉每次转型很麻烦呢?而且会有些错误,比如一个容器内放入了异质对象,强制转型的时候会出现cast异常。而这中错误在编译器是无从发现的。

1、泛型好处

1).类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

Java 程序中的一种流行技术是定义这样的集合,即它的元素或键是公共类型的,比如“String 列表”或者“String 到 String 的映射”。通过在变量声明中捕获这一附加的类型信息,泛型允许编译器实施这些附加的类型约束。类型错误现在就可以在编译时被捕获了,而不是在运行时当作 ClassCastException 展示出来。将类型检查从运行时挪到编译时有助于您更容易找到错误,并可提高程序的可靠性。
2).消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

尽管减少强制类型转换可以降低使用泛型类的代码的罗嗦程度,但是尽管减少强制类型转换可以降低使用泛型类的代码的罗嗦程度,但是声明泛型变量会带来相应的罗嗦。比较下面两个代码例子。

<span style="font-size:18px;">该代码不使用泛型:
List li = new ArrayList();
li.put(new Integer(3));
Integer i = (Integer) li.get(0);

该代码使用泛型:
List<Integer> li = new ArrayList<Integer>();<span style="white-space:pre">	</span>//<span style="font-size:18px; white-space: pre;">声明泛型变量会带来相应的罗嗦</span>
li.put(new Integer(3));
Integer i = li.get(0);</span>


二、for-each循环

语法:

for ( type 变量名:集合变量名 )  {…}

注意事项:
迭代变量必须在( )中定义
集合变量可以是数组或实现了Iterable接口的集合类

举例:

<span style="font-size:18px;">public static int add(int x,int ...args) {
int sum = x;
for(int arg:args) {<span style="white-space:pre">	</span>//使用增强for循环迭代
sum += arg;
}
return sum;
}</span>


三、自动拆装箱

自动装箱:

Integer num = 12;
自动拆箱:
System.out.println(num1 + 12);

基本数据类型的对象缓存:
Integer num1 = 12;
Integer num2 = 12;
System.out.println(num1 == num2);
//true,12作为Integer对象存放在byte常量池,num1,num2同时指向12Integer在常量池的地址

Integer num3 = 129;
Integer num4 = 129;
System.out.println(num3 == num4);
//false,129不在byte范围之内,num3,num4指向不同地址

Integer num5 = Integer.valueOf(12);
Integer num6 = Integer.valueOf(12);
System.out.println(num5 == num6);
//true,同样都是byte常量池。指向地址一样

四、枚举

1、为什么要有枚举

问题:要定义星期几或性别的变量,该怎么定义?

假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。

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

3、用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。 
私有的构造方法
每个元素分别用一个公有的静态成员变量表示
可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。

4、枚举的基本应用
举例:定义一个Weekday的枚举。

<span style="white-space:pre">		</span>public enum WeekDay{
<span style="white-space:pre">		</span>SUN(1),MON(),TUE,WED,THI,FRI,SAT;
<span style="white-space:pre">		</span>private WeekDay(){System.out.println("first");}
<span style="white-space:pre">		</span>private WeekDay(int day){System.out.println("second");}
<span style="white-space:pre">		</span>}
5、总结:

枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如可以调用
WeekDay.SUN.getClass().getNa
a10a
me和WeekDay.class.getName()。

五、可变参数

1、可变参数就是一个方法可以接受的参数不固定

例如:

<span style="white-space:pre">	</span><span style="font-size:18px;">public static void main(String[] args){</span>
<span style="font-size:18px;"><span style="white-space:pre">		</span>/*</span>
<span style="font-size:18px;"><span style="white-space:pre">		</span> *调用同一个方法add,但是输入参数不一样</span>
<span style="font-size:18px;"><span style="white-space:pre">		</span> */
<span style="white-space:pre">	</span>	System.out.println(add(2,3,4));
<span style="white-space:pre">	</span>	System.out.println(add(2,3));
<span style="white-space:pre">	</span>	System.out.println(add(2,3,4,5));
<span style="white-space:pre">	</span>}</span>
<span style="font-size:18px;"><span style="white-space:pre">	</span>public static int add(int x, int... args){
<span style="white-space:pre">	</span>	int sum = x;
<span style="white-space:pre">	</span>	for (int i = 0; i < args.length; i++) {
<span style="white-space:pre">	</span>		sum += args[i];
<span style="white-space:pre">	</span>	}
<span style="white-space:pre">	</span>return sum;
<span style="white-space:pre">	</span>}</span>

2、可变参数的特点

1). 只能出现在参数列表的最后;
2).  ... 位于变量类型和变量名之间,前后有无空格都可以
3). 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体重以数组的形式访问可变参数

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

详细请查看:www.itheima.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐