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 7.3.0 官网的压缩包安装 FastAdmin
使用 php 7.3.0 官网的压缩包安装 FastAdmin 直接从 php.net 官网下载了一 php7.3.0 的压缩包,解压到 c:/temp/php73 目录. 将 c:/temp/php ...
- yarn 知识点
yarn 与 npm 功能对应表格: 命令 yarn npm 初始化 yarn init npm init 安装项目所有包(注意) yarn npm install 添加 dependencies y ...
- php实现Facebook风格的 time ago函数
php实现Facebook风格的 time ago函数 非常好用,只要把里面的英文替换成中文就行了 英文函数代码如下: <?php function nicetime($date) { if(e ...
- jmeter—打开jmx报com.thoughtworks.xstream.converters.ConversionException
打开出错的jmx文件,查看出错行 由于缺少PerfMon Metrics Collector插件,所以报这个错误 下载地址(https://jmeter-plugins.org/downloads/a ...
- RequiresAuthentication
@RequiresAuthentication 验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时. @RequiresUser 验证用户是否被记忆,us ...
- C#之设计模式之六大原则
一.单一职责原则 原文链接:http://blog.csdn.net/lovelion/article/details/7536542 单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小. ...
- jquery.validate.js remote (php)
网上的人不厚道呀 validate 这玩意的异步是 返回的 echo 'true' 或者 echo 'false';很少有人说呀~.~ 转载了一篇原文: jquery.validate.js对于数 ...
- 设计模式初学者笔记:Builder模式
[作者:byeyear Email:byeyear@hotmail.com 首发:cnblogs 转载请注明] 在本文的开头,先森森的鄙视下自己……将Builder模式反反复复读了七 ...
- Excel数组排序+图片统一大小
Sub 图片调整合适大小() ' Debug.Print ActiveWorkbook.Name 图片显示比例 = 0.9 '1为顶满单元格 Dim wb As Workbook, sh As Wor ...
- Unity3D NGUI Sprite精灵动画
NGUI 2.6.1下载: part1 part2 NGUI 实现Sprite精灵动画很简单: 1.先制作图像集合.打开NGUI菜单下Atlas Maker,选中切好的图片,点击Add/Update按 ...