黑马程序员_基础加强
2013-10-20 18:29
274 查看
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
JDK5.0中引入了许多java的新特性,有些特性是为了简化书写,有些特性是为了进一步满足开发人员的需求,恰当的使用新特性,能提升代码的效率,安全性。同时学习并使用新特性是成为一名优秀的程序员必不可少的技能。体现了开发人员的自学能力,同时也提升了项目的开发进度。JDK5.0引入了较多的新特性。比较有代表性的有以下新特性。
1、增强for循环:迭代数组和实现Iterator接口的集合,不可有进行涉及索引的操作。
当需要对特定元素的操作时,推荐使用不同的for循环。
2、静态导入:导入包中静态方法。
需要注意当导入的包中有相同类时需要写全相应类的包名。
3、可变参数:用于函数的参数上,操作的同一类型的元素个数不确定的时候。 必须放在参数的末尾作为最后一个参数。
可变参数的内部封装了数组,可变参数需用在方法参数的最后一个参数的情况。
4、自动拆箱与装箱:将基本数据类型封装为包装类
Integernum = 4; ---à自定装箱,等效于Integer num = new Integer(4);
num= num + 1; ---à自动拆箱再装箱:num+1是拆箱成int,然后装箱为Integer
为了优化内存,包装类含有缓冲池:Integer池大小:-128~127,一个字节
String池:字符串池,已存在的不再创建新的。
这里应用了享元设计模式Flyweight。
5、枚举:enum,限定和固定对象的个数,指定取值内容。
枚举对象必须放在整个类最前面
私有构造函数,可定义属性、方法,实现接口、继承类
枚举类中可以有抽象方法,但是在对象身上必须实现,即列出的枚举值必须实现。
比较两个值,可直接用==即可
6、泛型:为解决类型的安全机制而出现的。用<>表示
多用于集合中,限定存入集合中的元素类型;类型不确定时也可使用
泛型是提供给编译器检查用的,编译后会去掉“类型”信息,不会影响效率
静态方法无法访问类上定义的泛型,需自己定义在方法上
泛型不存在继承,赋值两边类型必须一样,或也可一边有泛型
好处:
将运行时期的错误转移到编译时期,更安全。
避免了强转的麻烦
通配符:
开发者不知道调用者传入的类型是什么的时候,可使用?代表唯一的任意类型。
泛型的限定:
向上限定:? extends E:接收E或E的子类型
向下限定:? super E:接收E或E的父类型
下面是静态导入的代码示范:
下面是制动拆装箱的代码示范:
下面的代码是枚举的代码示范:
下面是使用普通java类对枚举的模拟实现:
JDK5.0中的新特性是面试中的常考题目,需要掌握好,一方面有助于应付面试,另一方面对于开发也有较大的帮助。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
JDK5.0中引入了许多java的新特性,有些特性是为了简化书写,有些特性是为了进一步满足开发人员的需求,恰当的使用新特性,能提升代码的效率,安全性。同时学习并使用新特性是成为一名优秀的程序员必不可少的技能。体现了开发人员的自学能力,同时也提升了项目的开发进度。JDK5.0引入了较多的新特性。比较有代表性的有以下新特性。
1、增强for循环:迭代数组和实现Iterator接口的集合,不可有进行涉及索引的操作。
当需要对特定元素的操作时,推荐使用不同的for循环。
2、静态导入:导入包中静态方法。
需要注意当导入的包中有相同类时需要写全相应类的包名。
3、可变参数:用于函数的参数上,操作的同一类型的元素个数不确定的时候。 必须放在参数的末尾作为最后一个参数。
可变参数的内部封装了数组,可变参数需用在方法参数的最后一个参数的情况。
4、自动拆箱与装箱:将基本数据类型封装为包装类
Integernum = 4; ---à自定装箱,等效于Integer num = new Integer(4);
num= num + 1; ---à自动拆箱再装箱:num+1是拆箱成int,然后装箱为Integer
为了优化内存,包装类含有缓冲池:Integer池大小:-128~127,一个字节
String池:字符串池,已存在的不再创建新的。
这里应用了享元设计模式Flyweight。
5、枚举:enum,限定和固定对象的个数,指定取值内容。
枚举对象必须放在整个类最前面
私有构造函数,可定义属性、方法,实现接口、继承类
枚举类中可以有抽象方法,但是在对象身上必须实现,即列出的枚举值必须实现。
比较两个值,可直接用==即可
6、泛型:为解决类型的安全机制而出现的。用<>表示
多用于集合中,限定存入集合中的元素类型;类型不确定时也可使用
泛型是提供给编译器检查用的,编译后会去掉“类型”信息,不会影响效率
静态方法无法访问类上定义的泛型,需自己定义在方法上
泛型不存在继承,赋值两边类型必须一样,或也可一边有泛型
好处:
将运行时期的错误转移到编译时期,更安全。
避免了强转的麻烦
通配符:
开发者不知道调用者传入的类型是什么的时候,可使用?代表唯一的任意类型。
泛型的限定:
向上限定:? extends E:接收E或E的子类型
向下限定:? super E:接收E或E的父类型
下面是静态导入的代码示范:
package cn.itcast.day1; //import static java.lang.Math.max; import static java.lang.Math.*; import cn.itcast.day2.AnnotationTest; public class StaticImport { public static void main(String[] args){ AnnotationTest.sayHello(); int x = 1; try { x++; } finally { System.out.println("template"); } System.out.println(x); System.out.println(max(3, 6)); System.out.println(abs(3 - 6)); } }
下面是制动拆装箱的代码示范:
package cn.itcast.day1; public class AutoBox { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Integer iObj = 3; System.out.println(iObj + 12); String s1 = new String("abc"); String s2 = new String("abc"); Integer i1 = 137; Integer i2 = 137; System.out.println(i1 == i2); Integer i3 = Integer.valueOf(213); Integer i4 = Integer.valueOf(213); System.out.println(i3==i4); } }
下面的代码是枚举的代码示范:
package cn.itcast.day1; import java.util.Date; public class EnumTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub WeekDay1 weekDay = WeekDay1.MON; System.out.println(weekDay.nextDay()); WeekDay weekDay2 = WeekDay.FRI; System.out.println(weekDay2); System.out.println(weekDay2.name()); System.out.println(weekDay2.ordinal()); System.out.println(WeekDay.valueOf("SUN").toString()); System.out.println(WeekDay.values().length); new Date(300){}; } public enum WeekDay{ SUN(1),MON(),TUE,WED,THI,FRI,SAT; private WeekDay(){System.out.println("first");} private WeekDay(int day){System.out.println("second");} } public enum TrafficLamp{ RED(30){ public TrafficLamp nextLamp(){ return GREEN; } }, GREEN(45){ public TrafficLamp nextLamp(){ return YELLOW; } }, YELLOW(5){ public TrafficLamp nextLamp(){ return RED; } }; public abstract TrafficLamp nextLamp(); private int time; private TrafficLamp(int time){this.time = time;} } }
下面是使用普通java类对枚举的模拟实现:
package cn.itcast.day1; public abstract class WeekDay1 { private WeekDay1(){} public final static WeekDay1 SUN = new WeekDay1(){ @Override public WeekDay1 nextDay() { // TODO Auto-generated method stub return MON; } }; public final static WeekDay1 MON = new WeekDay1(){ @Override public WeekDay1 nextDay() { // TODO Auto-generated method stub return SUN; } }; public abstract WeekDay1 nextDay(); /* public WeekDay nextDay(){ if(this == SUN){ return MON; }else{ return SUN; } } */ public String toString(){ return this==SUN?"SUN":"MON"; } }
JDK5.0中的新特性是面试中的常考题目,需要掌握好,一方面有助于应付面试,另一方面对于开发也有较大的帮助。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
相关文章推荐
- 黑马程序员_学习日记十六_基础加强之泛型、类加载器
- 黑马程序员---Java基础加强---反射
- 黑马程序员_JAVA基础加强——反射
- 黑马程序员___ 基础加强篇(一)
- 黑马程序员---java学习笔记之java基础加强二
- 黑马程序员--基础加强--第六篇--反射
- 黑马程序员Java基础加强
- 黑马程序员——Java基础加强—高新技术
- 黑马程序员---Java高新基础加强
- 黑马程序员-基础加强篇
- 黑马程序员--java基础加强2
- 黑马程序员基础加强---基础知识
- 黑马程序员_基础加强path1
- 黑马程序员_张孝祥老师的基础加强4
- 黑马程序员--基础加强(反射)
- 黑马程序员-c#基础加强版之方法控制流复习-2变量是否初始化的问题
- 黑马程序员 基础加强与项目2
- 黑马程序员_基础加强(AOP)
- 黑马程序员-----基础加强-注解,类加载器
- 黑马程序员_Java基础加强_代理