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 ...
随机推荐
- mysql之 远程连接 mysql 很慢,本地连接 mysql 很快 (skip-name-resolve)
症状:,远程连接 mysql 很慢,但是 本地连接 mysql 很快, ping 和 route 网络通信都是正常的. 解决:mysql 的配置文件中增加如下配置参数:[mysqld]skip-nam ...
- POJ1015陪审团(Jury Compromise)——dp+路径记录
题目:http://poj.org/problem?id=1015 差值是有后效性的,所以“转化为可行性”,开一维记录“能否达到这个差值”. 当然可以开两维分别记录 a 和 b,但 “值只是0或1” ...
- thinkPHP5 引入模板
有三种方法:第一种: 直接使用 return view(); 助手函数第二种: use think\View; class Admin extends View 见下第三种: use think\Co ...
- 重置SQL Server sa密码
查询分析器,连接时,身份验证使用"使用windows身份验证" 然后,执行: EXEC sp_password NULL, '新密码', 'Sa'
- 浏览器同源策略,跨域请求jsonp
浏览器的同源策略 浏览器安全的基石是"同源政策"(same-origin policy) 含义: 1995年,同源政策由 Netscape 公司引入浏览器.目前,所有浏览器都实行这 ...
- 【C#】string格式的日期转为DateTime类型及时间格式化处理方法
日期格式:yyyyMMdd HH:mm:ss(注意此字符串的字母大小写很严格) yyyy:代表年份 MM: 代表月份 dd: 代表天 HH: 代表小时(24小时制) mm: 代表分钟 ss: 代表秒 ...
- virtualbox centos 网络配置
https://www.centos.bz/2017/08/virtualbox-centos7-nat-bridge/
- sigar在Centos和Windows下使用java系统软硬件配置信息
背景 本来这个网上一大堆实在没什么想写的,但是好像大多数都是互相抄袭的,在centos根本上用不了,因此我整理下自己具体实现的步骤. 使用环境 sigar版本:hyperic-sigar-1.6.4 ...
- OSPF两种组播地址的区别和联系
1.点到点网络: 是连接单独的一对路由器的网络,点到点网络上的有效邻居总是可以形成邻接关系的,在这种网络上,OSPF包的目标地址使用的是224.0.0.52.广播型网络, 比如以太网,Token Ri ...
- zabbix企业应用:通过SNMP和iDRAC监控DELL服务器硬件
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://qicheng0211.blog.51cto.com/3958621/174998 ...