Java5新特性
- 1、Java 语言
- 1.1 Generics
- 1.2 foreach
- 1.3 自动拆箱装箱
- 1.4 enum
- 1.5 可变参数 varargs
- 1.6 static import
- 1.7 annotations
- 2、java lang package
- 2.1 新增 ProcessBuilder类
- 2.2 java.lang.Thread 增强
- 2.3 instrument 包( 支持字节码操作)
- 3、java.util package
- 3.1 Formatter
- 3.2 新增 Scanner类
- 3.3 集合增强
1、Java 语言增强
1.1、泛型 Generics:
引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处。
Parameterized Type作为参数和返回值,Generic是vararg、annotation、enumeration、collection的基石。
A、类型安全
抛弃List、Map,使用List
B、方法参数和返回值加上了Type
抛弃List、Map,使用List
C、不需要类型转换
List
String str=list.get(i);
D、类型通配符“?”
假设一个打印List
代码:
public void printList(List> list,PrintStream out)throws IOException{ for(Iterator> i=list.iterator();i.hasNext();){ System.out.println(i.next.toString()); } }
如果通配符?让我们的参数类型过于广泛,我们可以把List>、Iterator> 修改为
List Extends Number>、Iterator Extends Number>限制一下它。
1.2、foreach
也就是支持 for (String str : strs){}
1.3、自动装箱拆箱(自动类型包装和解包)autoboxing & unboxing:
简单的说是类型自动转换。
自动装包:基本类型自动转为包装类(int ——Integer)
自动拆包:包装类自动转为基本类型(Integer——int)
1.4 enum
在此之前,想要写enum,通常是写 publict static final 修饰的字段。
在java 5后,可以直接编写enum了
1.5、可变参数varargs(varargs number of arguments)
参数类型相同时,把重载函数合并到一起了。 如:
public void test(object... objs){ for(Object obj:objs){ System.out.println(obj); } }
1.6、static import
1.7 Annotations
支持注解,详情参考 Java Annotation学习
2、java.lang包下面在类在变化
2.1 ProcessBuilder
可以使用ProcessBuilder来创建子进程了
2.2 java.lang.Thread 类增强
1) 线程可以设置priority
2)增加了 Thread.State类
3)提供了新的dump API: The getStackTrace
and getAllStackTraces
4)提供了 uncaughtExceptionHandler 机制,可以自定义未被捕获的异常如何去处理了
5)添加了sleep()方法
2.3 Instrumentation
提供instrumentation, 可以在运行时动态的修改类的字节码,重新定义类。它成了javaagent 和 APM产品的基石。
3、java.util 包
3.1 新的格式化方法(java.util.Formatter)
formatter.format("Remaining account balance: $%.2f", balance);
3.2 Scanner 类
这是个更为强大好用的输入、流操作工具类。
3.3、Collection增强
HashMap的替代者ConcurrentHashMap和ArrayList的替代者CopyOnWriteArrayList
在大并发量读取时采用java.util.concurrent包里的一些类会让大家满意BlockingQueue、Callable、Executor、Semaphore...