jdk5新特性
前两天看到jdk10试用版都出来了,才发现自己连1.8都没用过,对不同版本的jdk的新特性也不是太了解,所以想还是百度一下看看人家怎么说然后自己记录总结一下,其中jdk1.8的新特性可以到edu.51cto.com上学习一下,好了,现在说说jdk1.5的常用新特性吧。
(9个)
泛型,
foreach循环,
自动拆装箱,
类型安全的枚举,
可变参数,
内省(https://www.cnblogs.com/H_Razor/archive/2011/02/28/1967178.html),
静态导入,
线程池,
元数据(http://www.importnew.com/14227.html)
- 泛型(Generic)
- C++通过模板技术可以指定集合的元素类型,而java在1.5之前一直没有相对应的功能,一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制的类型转换。猛虎引入了泛型,它允许指定集合里元素的类型,这样你可以强类型在编译时刻进行类型检查的好处。
1 Collection<String> c = new ArrayList<String>();
2 c.add(new Date());
3 //编译器会给出一个错误:
4 add(java.lang.String) in java.util.Collection<java.lang.String> cannot be applied to (java.util.Date) - foreach循环(Enhanced for loop)
- foreach循环的加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。典型的代码为:

1 void processAll(Collection c) {
2 for(Iterator i = c.iterator();i.hasNext();) {
3 MyClass myObject = (MyClass) i.next();
4 myObject.process();
5 }
6 }
7 //使用foreach循环,我们可以把代码改写成:
8 void processAll(Colllection<MyClass> c) {
9 for(MyClass myObject : c) {
10 myObject.process();
11 }
12 }
13 //这段代码要比上面清晰许多,并且避免了强制类型转换。
- 自动拆装箱(Autoboxing/unboxing)
- 自动拆装箱大大方便了基本类型数据和它们包装类的使用
- 自动装箱:基本类型自动转为包装类(int >> Integer)
- 自动拆箱:包装类自动转为基本类型(Integer >> int)
- 在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制能解决我们的问题
1 int a = 3;
2 COllection<Integer> c = new ArrayList<Integer>();
3 c.add(a);//自动转换为Integer
4
5 Integer b = new Integer(2);
6 c.add(b+2);//这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer - 类型安全的枚举(Type safe enums)
- JDK1.5加入了一个全新的“类”--枚举类型。为此JDK1.5引入了一个新关键字enum。我们可以这样定义一个枚举类型。

1 public enum Color {
2 RED,WHITE,BLUE
3 }
4 public enum Coin {
5
6 penny(1), nickel(5), dime(10), quarter(25);
7
8 Coin(int value) {
9 this.value = value;
10 }
11
12 private final int value;
13
14 public int value() {
15 return value;
16 }
17 }
18 //然后可以这样来使用:
19 Color myColor = Color.RED;
20 //枚举类型还提供了两个有用的静态方法values()和valueOf().我们可以很方便地使用它们,例如:
21 for(Color c : Color.values()) {
22 System.out.printl(c);
23 }
- 可变参数(Var args)
- 可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数生命中的最后一个参数。加入我们要写一个简单的方法打印一些对象:
1 util.write(obj1);
2 util.write(obj1,obj2);
3 util.write(obj1,obj2,obj3);
4 ...在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话,我们只需要一个函数就行了:1 public void write(Object... objs) {
2 for(Object obj : pbjs) {
3 System.out.println(obj);
4 }
5 }在引入可变参数以后,Java的反射包也更加方便使用了,对于1 c.getMethod("test", new Object[0]).invoke(c.newInstance(), new Object[0]);
2 //现在我们可以这样写了
3 c.getMethod("test").invoke(c.newInstance());
4 //这样代码比原来清楚了很多 - 内省(Introspector)
- 内省是java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。通过getName/setName来访问name属性,这就是默认的规则。Java中提供了一套API用访问某个属性的getter和setter方法,通过这些API可以使你不需要了解这个规则(但你最好还是要搞清楚),这些API存放于包java.beans中。
- 一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。
- 静态导入(Static import)
- 要使用静态成员(方法和变量)我们给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名
1 import static java.lang.Math.*;
2 ...
3 r = sin(PI * 2);//无需再写 r = Math.sin(Math.PI * 2);
4 不过,过度使用这个特性也会一定程度上降低代码的可读性。
8. 线程并发库(JUC)
线程并发库是Java1.5提出的关于多线程处理的高级功能,所在包:java.util.concurrent(juc)
1.线程互斥
工具类描述:Lock,RedWriteLock
2.线程通信
描述:Condition
3.线程池
ExecutorService
4.同步队列
ArrayBlockingQueue
5.同步集合
ConcurrentHashMap,CopyOnWriteArrayList
6.线程同步工具
Semaphore
关于线程并发库的内容还有很多(很重要),这里就不一一列举了,感兴趣的朋友可以查看一下相关资料。
9. 元数据(Metadata)
注解(Annotation), 内容见上文网址.
jdk5新特性的更多相关文章
- Java API —— JDK5新特性
JDK5新特性 自动拆装箱.泛型.增强for.静态导入.可变参数.枚举 1.增强for概述 1)简化数组和Collection集合的遍历 2)格式: ...
- JDK5新特性之 可变参数的方法
可变参数的方法:不知道这个方法该定义多少个参数 注意: > 参数实际上是数组 > 必须写在参数列表最后一个 package cn.itcast.day24.varparam; import ...
- day27<反射&JDK5新特性>
反射(类的加载概述和加载时机) 反射(类加载器的概述和分类) 反射(反射概述) 反射(Class.forName()读取配置文件举例) 反射(通过反射获取带参构造方法并使用) 反射(通过反射获取成员变 ...
- JDK5 新特性
JDK5新特性目录导航: 自动拆装箱 Foreach 静态导入 可变参数 Var args 枚举 格式化输出 泛型 ProcessBuilder 内省 线程并发库(JUC) 监控和管理虚拟机 元数据 ...
- Java基础知识强化66:基本类型包装类之JDK5新特性自动装箱和拆箱
1. JDK1.5以后,简化了定义方式. (1)Integer x = new Integer(4):可以直接写成如下: Integer x = 4 ://自动装箱,通过valu ...
- Java JDK5新特性-泛型
2017-10-30 22:47:11 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质 ...
- JDK5新特性之线程同步集合(五)
一. 传统集合: 传统方式下的Collection在迭代集合时, 不同意对集合进行改动: public class CollectionModifyExceptionTest { public sta ...
- JDK5新特性之线程同步工具类(三)
一. Semaphore Semaphore能够控制同一时候訪问资源的线程个数, 比如: 实现一个文件同意的并发訪问数. Semaphore实现的功能就类似厕全部5个坑, 增加有十个人要上厕所, 那么 ...
- java新手笔记32 jdk5新特性
1.for package com.yfs.javase; import java.awt.Color; import java.util.Calendar; import java.util.Has ...
随机推荐
- php 的交互命令行
php 的交互命令行 使用过 python 都知道 python 可以使用交互命令. 如下图: 但是 执行 php 显示这个是什么鬼? 按回车和加分号都没用,这是什么原因? 其实是因为使用 php 交 ...
- Java 浅析 Thread.join()
概要 本文分为三部分对 Thread.join() 进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() ...
- Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签
1. IOC - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交 由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周 ...
- Logstash之二:原理
一.Logstash 介绍 Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理. 二.工作流程 Logstash 工作的三个阶段: ...
- [转]ASP.net Application 生命周期事件
生命周期事件和 Global.asax 文件 在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法.若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global. ...
- android手机版本
1.判断安卓手机是64位,还是32位 adb pull /system/bin/cat file cat 32位 64位 2.判断安卓手机CPU是64位,还是32位 adb shell getprop ...
- 关于win时间同步的解决方案
将以下的批处理执行:net stop w32time sc config w32time start= auto net start w32time w32tm /config /update /ma ...
- 【H3C交换机】cpu各个进程的详细说明
display cpu-usage命令用来查看设备CPU占用率的统计信息,以及各个进程的cpu占用率. 各个进程详细说明如下,不同软件版本.盒式和框式的cpu进程略有不同,详细信息可以查看手册中的命令 ...
- CA单向认证和双向认证的区别?
1:单向认证,内容会被串改吗?
- ORACLE V$lock视图TYPE,ID1,ID2取值的含义
在oracle v$lock视图中,下面对type,ID1,ID2三个列的具体含义说明下: TYPE 有TM,TX两种类型,TX为行级锁,事物锁,TM锁为表级锁 TYPE ID1 ID2 TM 被 ...