JDK发展史及特性

1、jdk的发展史及特性

1995年5月23 java(原名Oak)诞生,并且在SunWorld大会上正式发表了java1.0版本。

1996年1月23 JDK1.0发布Java语言有了第一个正式版本的运行环境。JDK1.0提供了一个纯解释执行的Java虚拟机的实现(Sun class VM)。JDK1.0的代表技术:JVM,Applet,AWT.

1997年2月19日,JDK1.1,新特性:JAR文件格式、JDBC、JavaBean、RMI、内部类(Inner class)、反射(Reflection)

1998年12月4日,JDK1.2,新特性:基础体系拆分:J2SE(面向桌面应用程序开发)、J2EE(面向企业级应用开发程序开发)、J2ME(面向手机等移动终端开发),技术:EJB、Java Plug-in、JavaIDL 、Swing、JIT(Just In Time)编译器.

2000年5月8日JDK1.3:使用CORBA IIOP实现RMI的通信协议,改进Java2D,添加JavaSound类库。

2002年2月13日JDK1.4 ,新特性:正则表达式,异常链,NIO,日志类,XML解析器,XLST转换器。

2004年9月30日,JDK1.5,新特性:自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环。

2006年12月11日,JDK1.6,新特性:提供动态语言支持、提供编译API和卫星HTTP服务器API,改进JVM的锁,同步垃圾回收,类加载。

2009年2月19日JDK1.7,新特性:提供GI收集器、加强对非Java语言的调用支持(JSR-292,升级类加载架构。

2014 年 3 月 18 日 JDK1.8新特性:Lambda 表达式、方法引用、默认方法、新工具、Stream API、Date Time API 、Optional 类、Nashorn, JavaScript 引擎。 

2017年9月21日jdk9.0,新特性:模块系统、HTTP 2 客户端、多版本兼容 JAR 包、私有接口方法、改进的 Stream API、响应式流(Reactive Streams) API:

2018年3月21日jdk10,新特性:var 局部变量类型推断、统一的垃圾回收接口

2018年9月25日jdk11,新特性:HTTP客户端(标准)、无操作垃圾收集器。首个LTS版本

2019年3月19日jdk12:新增一个名为 Shenandoah 的垃圾回收器、扩展switch语句的功能、改进 G1 垃圾回收器

2、特性描述

   Java5

  •      泛型   

 List<Integer> list=new ArrayList<Integer>();
  •     增强循环

           int[] array = {1, 2, 3, 4, 5};
           for (int i : array) {
                 System.out.println(i);
            } 

  •       自动封箱拆箱(Autoboxing/Unboxing ):八大基本类型和它们的包装类能够自动的相互转换

     Integer in1 = new Integer(n);  int m = in.intValue();

  •        枚举:实现线程安全的单例模式好方式

           enum TestEnum{
               one,
               two;
              TestEnum() {
               }
            }

  •          可变参数

               语法:(type...argument)

               可变参数本质仍然是用一个数组存储参数,只是java隐藏了这一过程。需要注意的是如果一个方法声明中含有可变参                   数,那必须放在最后一个位置

               案例:

                       public static void testVarargs(String...args){

                           //本质就是个数组
                           System.out.println(args[1]);
                           for (String arg : args) {
                                 System.out.println(arg);
                            }

                       }

  •              静态导入(Static Import)

                         通过import类来使用类里的静态变量或方法(直接通过名字,不需要加上类名.),简化了代码的书写。

                           //单个导入
                         import static java.lang.Math.PI;
                         //批量导入
                         import static java.lang.Math.*;

  •               注解(Annotations)。关键字@interface。

                         //注释注解的注解又叫做元注解
                         @Retention(RetentionPolicy.RUNTIME)
                         @Target(ElementType.METHOD)
                         public @interface MyAnnotations {
                             //注解内可以添加方法,也可以不添加
                             //注解方法的返回值只能是基本类型,String,Class类,枚举,注解,可以有默认值。
                             int id();
                             String name() default "whh";
                             Class classType();
                             TestEnum enumType();
                         }

  •                新的线程模型和并发库(java.util.concurrent)。

  Java6    

  •                集合框架增强。

                       

  为了更好的支持双向访问集合。添加了许多新的类和接口。

新的数组拷贝方法。
    Arrays.copyOf和Arrays.copyOfRange

//以下为添加的新接口和类
               Deque,
    BlockingDeque,
    NavigableSet,
    NavigableMap,
    ConcurrentNavigableMap,
    ArrayDeque,
    ConcurrentSkipListSet  ,
    ConcurrentSkipListMap,
    ConcurrentSkipListMap,
    AbstractMap.SimpleEntry  ,
    AbstractMap.SimpleImmutableEntry
  •                 Scripting. 可以让其他语言在java平台上运行。 java6包含了一个基于Mozilla Rhino实现的javascript脚本引擎。
  •                 支持JDBC4.0规范

Java7

  •                  二进制前缀0b或者0B。整型(byte, short, int, long)可以直接用二进制表示。

//一个8位'byte'值:
byte aByte = (byte)0b00100001;

//一个16位'short'值:
short aShort = (short)0b1010000101000101;

//一些32位'int'值:
int anInt1 = 0b10100001010001011010000101000101;
int anInt2 = 0b101;
int anInt3 = 0B101; // B可以是大写也可以是小写.

//一个64位的'long'值. 注意"L"结尾:
long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;
  •                  字面常量数字的下划线。用下划线连接整数提升其可读性,自身无含义,不可用在数字的起始和末尾。

                       

这个功能可以用来对一个数字字面量根据位数分组,从而提高你代码的可读性。比如,如果你的代码包含一些数字有很多的位数,你能够用下划线字符把位数分为三组,类似于你用一个像逗号或者一个空格作为分隔符。

下划线只能出现在数字之间,下面的情形不能出现下划线:

数字的开头和结尾
       在浮点数中与小数点相邻
         F或者L后缀之前
      在预期数字串的位置
long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi =  3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;

float pi1 = 3_.1415F;      // 无效; 不能和小数点相邻
float pi2 = 3._1415F;      // 无效; 不能和小数点相邻
long socialSecurityNumber1 = 9
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值