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 ...
- 添加pptp、l2tp客户端
一.编译 -> Network -> Network ->VPN 二.配置 1. L2TP配置 network配置文件增加: config interface 'vpn1' opti ...
- [C++ Primer] : 第14章: 重载运算符与类型转换
基本概念 重载运算符是具有特殊名字的函数: 它们的名字由关键字operator和其后要定义的运算符号共同组成. 重载运算符函数的参数数量与该运算符作用的运算对象数量一样多. 对于二元运算符来说, 左侧 ...
- GNU C与ANSI C的不同
引用:http://tsroad.lofter.com/post/376316_57ac519 1.GNU C可定义0长度数组,目的是为了定义可变长结构体. struct var_struct{ ...
- 更新上篇文章 调用三级目录文章内容 dede频道页实现三级栏目嵌套调用文章
原文:http://www.wuaie.com/?p=66 源码改写 $typeid = $row['id']; if((class_exists('PartView'))) { $pv = new ...
- JAVA架构师面试题 一
基础题目 Java线程的状态 进程和线程的区别,进程间如何通讯,线程间如何通讯 HashMap的数据结构是什么?如何实现的.和HashTable,ConcurrentHashMap的区别 Cookie ...
- C/C++动态分配连续空间,下标越界导致的free():invalid next size问题
昨天帮导师做的一个程序出了内存泄露的bug(在VS上程序运行一切正常,等return返回后才出错) 而且是程序运行结束后才出现的错误,在退出前一切代码都顺利执行完了,只是return之后出错. 之后我 ...
- linux svn安装(转载)
第一章 安装 1. 采用源文件编译安装.源文件共两个,为:subversion-1.6.1.tar.gz (subversion 源文件)subversion-deps-1.6.1.tar.gz (s ...
- BASIC-7_蓝桥杯_特殊的数字
代码示例: #include <stdio.h>#define B(X) (X)*(X)*(X) int main(void){ int i = 0 ; int a = 0 , b = 0 ...
- CefSharp v62修改,支持.net4.0
吐槽一下,博客园久了没有上,账号没了,重新申请一个. cesharp v62版本,内核采用最新的Cef 62,支持最新的Grid布局. 由于官方的cefsharp 采用.net4.5.2开发.怎么办怎 ...