背景:求职过程中,这个问题反复被问到。如果答不上来,只能说明基本功不扎实,并不能说自己擅长java。

技术趣味史-Java 各个版本的特性

Java 5

2004 年 Sun 公司发布 J2SE5(没错,Sun 公司又改名字了),版本代号 Tiger,这个版本的 Java 语言新功能如下:

  • 1、泛型

  • 2、Metadata,元数据,描述数据的数据。

  • 3、自动装箱和拆箱,也就是基本数据类型(如 int)和它的包装类型(如 Integer)自动帮你转换(其实背后是相关的方法帮你做了转换工作)。

  • 4、枚举

  • 5、可变参数,一个函数可以传入数量不固定的参数值。

  • 6、增强版的 for 循环

  • 7、改进了 Java 的内存模型,提供了 java.util.concurrent 并发包。

Java 6

2006 年 Sun 公司发布 JavaSE6(不要抱怨又改名字了,因为马上就要见不到 Sun 公司了),版本代号 Mustang(野马),也是个经典版本,直到现在也有很多人在(讲个笑话,现在 Java8 的使用者,绝大多数都是用着 Java8 写着 Java 6 的代码,其实我也是,逃~),这个版本的 Java 主 要改变如下:

  • 1、提供动态语言支持。

  • 2、提供编译 API,即 Java 程序可以调用 Java 编译器的 API。

  • 3、Swing 库的一些改进

  • 4、JVM 的优化

  • 5、微型 HTTP 服务器 API 等。

这个版本的 Java 更多是对之前版本功能的优化,增强了用户的可用性和修复了一些漏洞,所以直到现在也有很多项目在使用(给项目用的Java版本升个级可能会有意想不到的的问题,所以保持原样就好了,运维大哥要溜了溜了~)。

Java 7

20011 年,这时候 Oracle 已经把 Sun 公司收购了(2009 年后 Java 就是 Oracle 的人了),Oracle 发布 JavaSE7,新增的功能如下:

1、放宽 switch 的使用,我们可以在 switch 中使用字符串啦,而在这个版本之前,只能使用字符和数字。

2、try-resource-with 语句,帮助我们自动化管理资源,如打开文件,对文件操作结束后,JVM 可以自动帮我们关闭文件资源,当然前提是你要用 try-resource-with 语句。

3、加入了类型推断功能,比如你之前版本使用泛型类型时这样写 ArrayList<User> userList= new ArrayList<User>();,这个版本只需要这样写 ArrayList<User> userList= new ArrayList<>();,也即是后面一个尖括号内的类型,JVM 帮我们自动类型判断补全了。

4、简化了可变参数的使用

5、支持二进制整数,在硬件开发中,二进制数更常用,方便人查看。

6、支持带下划线的数值,如 int a = 100000000;,0 太多不便于人阅读,这个版本支持这样写 int a = 100_000_000,这样就对数值一目了然了吧。

7、异常处理支持多个 catch 语句

8、NIO 库的一些改进,增加多重文件的支持、文件原始数据和符号链接。

9、其他(更多是进一步的优化)。。。

Java 8(推荐版本)

2014 年,JavaSE8 发布,这个版本包含了之前本想在 JavaSE7 加入的,但由于时间仓促延迟发布的一些功能。

1、Lambda 表达式,简化代码(这个后面会专门写一篇文章介绍)。

2、注解功能的增强。重复注解和注解扩展,现在几乎可以为任何东西添加注解:局部变量、泛型类、父类与接口的实现,就连方法的异常也能添加注解。

3、新的时间和日期 API,在这之前 Java 的时间和日期库被投票为最难用的 API 之一,所以这个版本就改进了。

4、JavaFX,一种用在桌面开发领域的技术(也是和其他公司竞争,这个让我们拭目以待吧)。

5、静态链接 JNI 程序库(这个做安卓开发的同学应该熟悉)。

6、接口默认方法和静态方法

7、函数式接口

8、方法引用

9、java.util.stream

10、HashMap的底层实现有变化

11、JVM内存管理方面,由元空间代替了永久代。

区别:

  1. 元空间并不在虚拟机中,而是使用本地内存
  2. 默认情况下,元空间的大小仅受本地内存限制
  3. 也可以通过-XX:MetaspaceSize指定元空间大小

Java 面试知识点解析(四)——版本特性篇(2)

ps:详细讲解了jdk8中的各个新特性

Java 9

2017 年,Oracle 发布 JavaSE9(这个版本的功能早在 2011 年的 JavaOne 大会中就讨论了),这个版本目前也还在更新中,一些新功能就简要介绍一下。

1、模块化(这点也是向其他语言学习的,如 JavaScript)。

2、Java Shell(这点也是向其他语言学习的,如 Python),在这之前总有人说 Java 太麻烦,写个 Hello Word 都要新建个类,有时候测试个几行的代码都不方便,Java Shell 推出后,Java 开发者不用眼馋其他语言的 Shell 了,你可以向下面图中这样写 Java 的 Hello Word 了(我的电脑上装了 Java 6、7、8、9、10 ,准备集齐七个版本召唤 Java 神龙,txtx~)。

3、即时编译功能的增强

4、XML Catalogs ,XML 文件自动校验。

5、一些还在开发路上的功能。。。

jdk各个版本之间的差异的更多相关文章

  1. Moq4在.NET3.5和.NET4版本之间的差异

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Moq4在.NET3.5和.NET4版本之间的差异.

  2. Git抽取版本之间的差异,打包解压

    patch.sh文件代码 #!/bin/bash MY_SAVEIFS=$IFS #IFS=$(echo -en "\n\b") IFS=$'\n' build_dir=" ...

  3. MTK Android Git提取出两个版本之间的差异文件并打包

    git提取出两个版本之间的差异文件并打包 首先你得知道版本之间的commit id git log –pretty=oneline $ git log --pretty=oneline 1 差异文件并 ...

  4. (转)mysql各个主要版本之间的差异

    原文:http://blog.csdn.net/z1988316/article/details/8095407   一.各版本的常用命令差异 show innodb status\G mysql-5 ...

  5. SQL Server 2017 各版本之间的差异

    SQL Server 2017的亮点 您选择的语言和平台 使用您选择的语言在本地和云中(现在在 Windows.Linux 和 Docker 容器上)构建现代应用程序. 行业领先的性能 充分利用任务关 ...

  6. git 对比两个commit 之间的差异

    git 对比两个commit 之间的差异 比较两个版本之间的差异 git diff commit-id-1 commit-id-2 > d:/diff.txt 结果文件diff.txt中: &q ...

  7. git 比较不同版本文件的差异

    Git 比较不同版本文件差异的常用命令格式: git diff 查看尚未暂存的文件更新了哪些部分 git diff filename 查看尚未暂存的某个文件更新了哪些 git diff –cached ...

  8. jdk和Tomcat版本之间的关系,jdk尽量要比tomcat低才行

    注:本文来源于:6860 <jdk和Tomcat版本之间的关系,jdk尽量要比tomcat低才行> 用的tomcat是低版本的,但是用的jdk却是高版本的,用Servlet做的项目运行都没 ...

  9. Windows下多个JDK版本之间的切换

    一.JDK版本切换批处理脚本   我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下 ...

随机推荐

  1. huffman树即Huffma编码的实现

    自己写的Huffman树生成与Huffman编码实现 (实现了核心功能 ,打出了每个字符的huffman编码 其他的懒得实现了,有兴趣的朋友可以自己在我的基础增加功能 ) /* 原创文章 转载请附上原 ...

  2. Zabbix监控USG6300防火墙及交换机

    1.登录防火墙直接在web上面配置SNMP,只读团体名.读写团体名.Trap接收主机.安全名,点击应用完成防火墙上面的SNMP配置,如果你的命令行敲得6,可以使用命令行敲,配置效果一样,交换机没有这么 ...

  3. redis快照持久化和aof日志持久化

    持久化就是即使断电/重启需要存储的数据不会丢失,即将数据存储在设备中,一般存在硬盘内 redis的持久化有2种方式 :1-rdb快照  2-aof日志,可以通过配置redis.conf文件进行配置 r ...

  4. #021 Java复习第一天

    上学期在慧河工作室学习简单过java到面向对象就停止了 现在有事情又要用到java发现全忘了..... 快速复习一下 网课PPT 计算机: 硬件 + 软件 主要硬件: cpu :cpu是一个计算机的运 ...

  5. 做为一个Python程序员的基本素养

    今天在学习的过程中,明白了一些不是Python标准所必须要做的事情,二是做为一个合格的Python程序员应该所遵从的一些规范 分享给大家,有不足的地方请大家指正,此下是我学习的一点心得: 1.在给变量 ...

  6. 《精通Spring+4.x++企业应用开发实战》读后感

    引言 还记得大三时上培训班的是时候,当时的培训老师说自己是本地讲解spring最好的讲师,但是后来等我实习了看了<Spring 3.x 企业应用开发实战>以及后续版本<精通Sprin ...

  7. 英语进阶系列-A05-英语升级练习三

    古诗背诵 要求:认真背诵和朗读,然后翻译成现代文,并绘制图像描述图中的意向,时间限制到10 minutes.另外,从中找出英文单词,并记录. 例如:慈母 = kind mother,手 = hand, ...

  8. Spring MVC @RequestMapping注解详解

    @RequestMapping 参数说明 value:定义处理方法的请求的 URL 地址.(重点) method:定义处理方法的 http method 类型,如 GET.POST 等.(重点) pa ...

  9. 网络流二十四题之P2764 最小路径覆盖问题

    题目描述 给定有向图 G=(V,E)G=(V,E) .设 PP 是 GG 的一个简单路(顶点不相交)的集合.如果 VV 中每个定点恰好在PP的一条路上,则称 PP 是 GG 的一个路径覆盖.PP中路径 ...

  10. idea右键无法新建Java Class

    项目中新建目录之后,要在该目录下新增java Class文件,右键——>New发现无对应选项. 原因:新建目录之后需要设置目录作用,从而让idea识别. 方法:File-Project Stru ...