前两天看到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) 

  1. 泛型(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)
  2. 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 //这段代码要比上面清晰许多,并且避免了强制类型转换。
  3. 自动拆装箱(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
  4. 类型安全的枚举(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 }
  5. 可变参数(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 //这样代码比原来清楚了很多
  6. 内省(Introspector)
    • 内省是java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。通过getName/setName来访问name属性,这就是默认的规则。Java中提供了一套API用访问某个属性的getter和setter方法,通过这些API可以使你不需要了解这个规则(但你最好还是要搞清楚),这些API存放于包java.beans中。
    • 一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。
  7. 静态导入(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新特性的更多相关文章

  1. Java API —— JDK5新特性

    JDK5新特性         自动拆装箱.泛型.增强for.静态导入.可变参数.枚举   1.增强for概述         1)简化数组和Collection集合的遍历         2)格式: ...

  2. JDK5新特性之 可变参数的方法

    可变参数的方法:不知道这个方法该定义多少个参数 注意: > 参数实际上是数组 > 必须写在参数列表最后一个 package cn.itcast.day24.varparam; import ...

  3. day27<反射&JDK5新特性>

    反射(类的加载概述和加载时机) 反射(类加载器的概述和分类) 反射(反射概述) 反射(Class.forName()读取配置文件举例) 反射(通过反射获取带参构造方法并使用) 反射(通过反射获取成员变 ...

  4. JDK5 新特性

     JDK5新特性目录导航: 自动拆装箱 Foreach 静态导入 可变参数 Var args 枚举 格式化输出 泛型 ProcessBuilder 内省 线程并发库(JUC) 监控和管理虚拟机 元数据 ...

  5. Java基础知识强化66:基本类型包装类之JDK5新特性自动装箱和拆箱

    1. JDK1.5以后,简化了定义方式. (1)Integer  x = new  Integer(4):可以直接写成如下:         Integer  x = 4 ://自动装箱,通过valu ...

  6. Java JDK5新特性-泛型

    2017-10-30 22:47:11 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质 ...

  7. JDK5新特性之线程同步集合(五)

    一. 传统集合: 传统方式下的Collection在迭代集合时, 不同意对集合进行改动: public class CollectionModifyExceptionTest { public sta ...

  8. JDK5新特性之线程同步工具类(三)

    一. Semaphore Semaphore能够控制同一时候訪问资源的线程个数, 比如: 实现一个文件同意的并发訪问数. Semaphore实现的功能就类似厕全部5个坑, 增加有十个人要上厕所, 那么 ...

  9. java新手笔记32 jdk5新特性

    1.for package com.yfs.javase; import java.awt.Color; import java.util.Calendar; import java.util.Has ...

随机推荐

  1. ActiveMQ消息持久化存储策略

    ActiveMQ的内核是Java编写的,也就是说如果服务端没有Java运行环境ActiveMQ是无法运行的.ActiveMQ启动时,启动脚本使用wrapper包装器来启动JVM.JVM相关的配置信息在 ...

  2. JZ2440 裸机驱动 第7章 内存管理单元MMU

    本章目标:     了解虚拟地址和物理地址的关系:     掌握如何通过设置MMU来控制虚拟地址到物理地址的转化:     了解MMU的内存访问权限机制:     了解TLB.Cache.Write ...

  3. 切图js

    首先引用一段关于拖动,缩放,剪切的基础代码 /* * 作者:http://cloudgamer.cnblogs.com/ * * 改进与增强 * 作者:http://yoker.sc0826.com/ ...

  4. Postgresql 创建账户,修改密码

    sudo su postgres psql \password postgres输入密码\q 本机调试的时候,最好在装完以后添加一个pgsql的管理员帐号,否则phppgadmin不让登陆 创建用户 ...

  5. Date类为什么设计为可变的,而不是像String一样?

    首先,不得不承认,这确实是类库设计的一个错误,所以"为什么"进行了这个错误设计并没有意义.但没有事物一诞生就是完美的,我们的Java只是反应的慢了一点,再慢了一点. 更何况,Dat ...

  6. JavaScript之图片操作3

    在页面布局中,常常会用到九宫格布局,如下图所示: 本次我们就以九宫格为基础进行图片的布局操作,首先我们以上面的图片的为例,假设每个格子的大小都相同,将每一个格子相对其父元素进行定位,这样,我们只需要控 ...

  7. python 网页抓取并保存图片

    #-*-coding:utf-8-*- import os import uuid import urllib2 import cookielib '''获取文件后缀名''' def get_file ...

  8. Centos7安装docker(转!)

    时间在自己的运动中也会碰到挫折,遇到障碍,所以某一段时间也会滞留在哪一个房间里 <百年孤独> 转自:https://www.cnblogs.com/yufeng218/p/8370670. ...

  9. [UE4]创建多把枪,使用Class,参数的对象类型

    先来说说函数输入参数的区别: 1.Object Reference 2.Class Reference 会出现可以让你选择一个类 3.Soft Object Reference 4.Soft Clas ...

  10. Vue 路由的编程式导航与history模式

    编程式导航 注意:官方文档写错了 通过javascript跳转 //第一种跳转方式 // this.$router.push({ path: 'news' }) // this.$router.pus ...