黑马程序员_高新技术之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).消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
尽管减少强制类型转换可以降低使用泛型类的代码的罗嗦程度,但是尽管减少强制类型转换可以降低使用泛型类的代码的罗嗦程度,但是声明泛型变量会带来相应的罗嗦。比较下面两个代码例子。
二、for-each循环
语法:
for ( type 变量名:集合变量名 ) {…}
注意事项:
迭代变量必须在( )中定义
集合变量可以是数组或实现了Iterable接口的集合类
举例:
三、自动拆装箱
自动装箱:
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的枚举。
枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如可以调用
WeekDay.SUN.getClass().getNa
a10a
me和WeekDay.class.getName()。
五、可变参数
1、可变参数就是一个方法可以接受的参数不固定
例如:
2、可变参数的特点
1). 只能出现在参数列表的最后;
2). ... 位于变量类型和变量名之间,前后有无空格都可以
3). 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体重以数组的形式访问可变参数
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
详细请查看:www.itheima.com
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
相关文章推荐
- 黑马程序员—JAVA高新技术_JDK1.5新特性
- 黑马程序员 java_高新技术(一)_相关基础、JDK1.5新特性
- 黑马程序员—【Java高新技术】之eclipse开发工具枚举及JDK1.5新特性
- 黑马程序员:Java高新技术1--JDK1.5 新特性
- 黑马程序员--张孝祥Java高新技术-JDK1.5新特性(一)【静态导入、可变参数、增强for循环】
- 黑马程序员 Java高新技术-jdk1.5新特性和反射基础
- 黑马程序员-Java高新技术-jdk1.5简单的新特性
- 黑马程序员--Java高新技术--JDK1.5新特性(下)
- 黑马程序员---java基础加强---高新技术JDK1.5新特性
- 黑马程序员--张孝祥Java高新技术-JDK1.5新特性(二)【基本数据类型的自动拆箱与装箱,枚举】以及享元设计模式
- 黑马程序员—JAVA高新技术_JDK1.5新特性II
- 黑马程序员——Java高新技术——JDK1.5版本的新特性泛型
- 黑马程序员——java高新技术-jdk1.5新特性,注解,类加载器,代理
- 黑马程序员--java高新技术--jdk1.5新特性
- 黑马程序员——【Java高新技术】——JDK1.5新特性:静态导入、可变参数、增强型for循环、自动装箱拆箱、枚举
- 黑马程序员--Java高新技术--JDK1.5新特性(上)
- 黑马程序员--JAVA高新技术之eclipse开发工具相关知识、JDK1.5新特性
- 黑马程序员--Java高新技术--JDK1.5新特性(下)
- 黑马程序员_java高新技术_JDK1.5新特性
- 黑马程序员--Java高新技术--JDK1.5新特性(上)