相关阅读:

BAT等大厂十年研发经历,总结了12开发条经验(墙裂推荐)

一个技术总监迟到的新年开篇

互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载)

摘要:

1.目录结构

2.repl工具 jShell命令

3.模块化

4.多版本兼容jar包

5.接口方法的改进(在接口中 jdk7 只能声明全名常量和抽象方法 jdk8 添加了静态方法和默认方法 jdk9添加了私有方法)

6.钻石操作符升级 可以有{}

7.异常处理try升级

8.下划线标识符命名的限制 _ 不允许了

9.String底层存储结构的变更(char数组变成byte字节数组)

10.增强了Stream API(在java8基础上,新增加4个方法)

11.jdk9 中引入httpClient api 代替原有的HttpURLConnection

1、Java9 新特性之---目录结构

包含jdk8及以前的jdk版本,所有目录结构以及目录含义如图:

jdk9之后,目录结构发生变化如图:

这个新特性只要了解下就可以了,这个目录结构是方便为了接下来新特性做保证

2、Java9新特性之---JShell工具

怎么理解,怎么用呢?这个只是针对于java9来说,相当于cmd工具,你可以和cmd一样,直接写方法等等,不过我认为只是适用于初学者做一些最简单的运算和写一些方法:

在cmd中打开这个工具:

进入工具后可以做一些简单的java操作

等等,我认为只适用于初学者学习java不用其他编辑工具就可以学习java

3、Java9新特性之---模块化

一个大型的项目,比如淘宝商城等,都会包含多个模块,比如订单模块,前台模块,后台管理模块,广告位模块,会员模块.....等等,各个模块之间会相互调用,不过这种情况下会很少,只针对特殊情况,如果一个项目有30个模块系统进行开发,但是只要某个单独模块运行时,都会带动所有的模块,这样对于jvm来说在内存和性能上会很低,所以,java9提供了这一个特性,某一个模块运行的时候,jvm只会启动和它有依赖的模块,并不会加载所有的模块到内存中,这样性能大大的提高了。写法上如下:

一个项目中的两个模块,模块之间通过module-info.java来关联,在IDEA编辑器右键创建package-info.java

在这个两个模块java9Demo和java9Test中,java9demo编写一个实体类Person,在java9Test调用这样一个过程

这个是java9Demo 将 java9Test 模块需要的文件导出 exports  把它所在的包导出

然后在java9Test模块中创建一个package-info.java,引入java9Demo模块导出包名

这样就可以直接在java9Test中引入Person实体类了,这只是一个简单的例子。exports 控制着那些包可以被模块访问,所以不被导出的包不能被其他模块访问

4、Java9新特性之---多版本兼容Jar包

怎么理解呢?

好多公司用的jdk大部分还是老版本,jdk6,7 都有,他们都不敢升级主要是因为兼容的问题,但是java9做到了这一点,就是不管公司的项目是用的java6,7,8甚至5,他都可以兼容不出错,打个比方,你之前用的是iphone5,现在出现了iPhone6,iphone7,iphon8和iphone9,但是你不敢买9,因为你自己已经适应了iphone5的所有手机的运行流程,6,7,8每个手机的运行流程不一样,但是这个9很强大,它能够识别你现在所用的版本iphone是5,所以当你升级到iphone9的时候,你的这个手机运行流程还是iphone5的流程,只是在原有基础上拥有了更多的iphone9的所有优势。

5、Java9新特性之---接口Interface的升级

6、Java9新特性之---钻石操作符的升级

7、Java9新特性之---异常处理try升级

首先看下jdk6,7,8,9 的try catch的比较

Java6处理方式:

java7,8 共同的处理方式:

java9的处理方式:

这下子应该一幕了然了吧

8、Java9新特性之---特殊标识符增加限制

java8 之前 String _ ="hello";  这样的标识符可以用,java9就用不到。

9、Java9新特性之---String底层存储结构更换

java8之前 String的底层结构类型都是 char[] ,但是java9 就替换成 byte[] 这样来讲,更节省了空间和提高了性能

之所以替换是因为 之前一直是最小单位是一个char,用到两个byte,但是java8是基于latin1的,而这个latin1编码可以用一个byte标识,所以当你数据明明可以用到一个byte的时候,我们用到了一个最小单位chat两个byte,就多出了一个byte的空间。所以java9在这一方面进行了更新,现在的java9 是基于ISO/latin1/Utf-16  ,latin1和ISO用一个byte标识,UTF-16用两个byte标识,java9会自动识别用哪个编码,当数据用到1byte,就会使用iSO或者latin1 ,当空间数据满足2byte的时候,自动使用utf-16,节省了很多空间

同理,StringBuilder StringBuffer也更换了底层数据结构

10、Java9新特性之---Stream API 新方法的添加

在原有Stream API 新添加了4个方法,takeWhile dropWhile ofNullable iterate(新重载方法)

首先解释 takeWhile 当达到一定条件就结束:输出结果为45 43,如图

而 dropWhile 则和takeWhile 相反

ofNullable, 在java8中 Stream中的元素不能完全为null,否则空指针异常,而在java9的升级中,允许创建null

iterate 不加条件无线循环

11、Java9新特性之---引进HttpClient

以往我们都是通过maven添加httpclient ,java9直接引入即可

Java9所有特性都是为了提高性能和内存。

看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,这里是聚集了10W+技术的架构师圈子,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们聊互联网、聊架构,聊人生,聊职场,助你最快进阶!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

Java 9 新特性,看这里就明白了相关推荐

  1. 转载:java 7新特性-TWR(Try-with-resources)

    原始链接:https://blog.csdn.net/ty_laurel/article/details/60348495 java 7新特性-TWR(Try-with-resources) 今天在资 ...

  2. stream distinct去重_再来看看Java的新特性——Stream流

    半年前开始试着使用Java的新特性,给我印象最深的就是Stream流和Optional.其中Stream提高了看法效率,让代码看起来十分清爽. 为什么要使用流? 摘要中已经说明了,为了提高开发效率.流 ...

  3. 跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局

    转载自   跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局 恭喜你们,马上就要学完Java8 Stream流的一整系列了,其实我相信Stream流对很多使用Java的同 ...

  4. 跟我学 Java 8 新特性之 Stream 流(六)收集

    转载自   跟我学 Java 8 新特性之 Stream 流(六)收集 我们前面的五篇文章基本都是在说将一个集合转成一个流,然后对流进行操作,其实这种操作是最多的,但有时候我们也是需要从流中收集起一些 ...

  5. 跟我学 Java 8 新特性之 Stream 流(二)关键知识点

    转载自   跟我学 Java 8 新特性之 Stream 流(二)关键知识点 我们的第一篇文章,主要是通过一个Demo,让大家体验了一下使用流API的那种酣畅淋漓的感觉.如果你没有实践,我还是再次呼吁 ...

  6. 跟我学 Java 8 新特性之 Stream 流(四)并行流

    转载自   跟我学 Java 8 新特性之 Stream 流(四)并行流 随着对流API认识的慢慢深入,本章我们要讨论的知识点是流API里面的并行流了. 在开始讨论并行流之前,我先引发一下大家的思考, ...

  7. 跟我学 Java 8 新特性之 Stream 流(五)映射

    转载自   跟我学 Java 8 新特性之 Stream 流(五)映射 经过了前面四篇文章的学习,相信大家对Stream流已经是相当的熟悉了,同时也掌握了一些高级功能了,如果你之前有阅读过集合框架的基 ...

  8. Java 8新特性探究(二)深入解析默认方法

    转载自 Java 8新特性探究(二)深入解析默认方法 什么是默认方法,为什么要有默认方法 简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法.只需在方法名前面加个default关键字即可. ...

  9. Java 8新特性——default方法(defender方法)介绍

    转载自 Java 8新特性--default方法(defender方法)介绍 我们都知道在Java语言的接口中只能定义方法名,而不能包含方法的具体实现代码.接口中定义的方法必须在接口的非抽象子类中实现 ...

  10. Java 8 新特性 lambda表达式

    / Created by Manager on 2021/4/1. Java 8 新特性 lambda表达式 StreamAPI 新日期 新注解 */ 视频连接 1https://www.bilibi ...

最新文章

  1. C++实现int与string之间的相互转换
  2. python自动化发送邮件_python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下(详解)...
  3. LR学习笔记三 之 界面分析
  4. python绘制动态图-Python利用Echarts绘制动态交互图:快速入门
  5. DCMTK:使用dcmsr API创建示例结构化报告
  6. 多继承有什么坏处,为什么java搞单继承,接口为什么可以摈弃这些坏处
  7. 307. Range Sum Query - Mutable | 307. 区域和检索 - 数组可修改(数据结构:线段树,图文详解)
  8. 前端学习(3204):复习类相关知识2
  9. php pdo 错误信息,PHP的PDO错误与错误处理
  10. LeetCode2. 两数相加
  11. 小数加分数怎样计算讲解_“分数,小数,百分数 的互化”我这样教学,学生很快就学会了。...
  12. hdu 1507(最大匹配)
  13. 班服的图片展示和投票的实现
  14. ubuntu7.10下配置java 6和mysql
  15. JAVA 获取mac地址
  16. TestCase和TestSuite详解
  17. cas:1580547-45-0 ; (ir[p-fppy]2(bpy))pf6 (2,2‘-联吡啶)双[2-(4-氟苯基)吡啶]铱(III) 六氟磷酸盐
  18. 旋转矩阵转欧拉角(二自由度约束)
  19. python绘制太阳系_如何利用Python动态模拟太阳系运转
  20. Qt5 学习之路及嵌入式开发教程4:代码编写实现信号槽例子

热门文章

  1. OA选型案例:建筑行业选型华天OA系统
  2. 网络电话坐享iOS10红利 iphone7免费通话
  3. Android 获取sim卡序列号
  4. grpc(5):使用grpc+consul 开发服务调用
  5. 团队项目—第二阶段第五天
  6. CentOS 7下网络设备命名
  7. 如何在Mac上恢复格式化的相机卡
  8. Mac和iPhone之间如何设置通用剪贴板?
  9. 为Mac任意命令设置快捷键
  10. 线性回归 最小二乘推导