Java9发布于2017年9月22日。JEP261:模块系统在传统的Java应用中,类路径的机制限制了封装性。即使类被标记为package-private,也可以被同一个类路径中的其他任意代码访问。而且随着应用程序规模的增长,类路径依赖变得越来越复杂。Java为了能够改进大型应用程序和库的封装性、可维护性和性能,在Java9版本引入模块系统。模块系统是Java平台架构的一次重大变革,它旨在解决长期以来Java应用所面临的一些结构性问题,特别是在大型系统和微服务架构中。其主要内容是:模块化JDK:JDK被划分为一系列的模块,使得可以只需要引入必需的JDK模块,减少了应用程序的体积。模块路径:取代
CompletableFuture是Java8中引入用于处理异步编程的核心类,它引入了一种基于Future的编程模型,允许我们以更加直观的方式执行异步操作,并处理它们的结果或异常。关于CompletableFuture的核心原理请阅读:Java8新特性—深入理解CompletableFuture。但是在实际使用过程中,发现CompletableFuture还有一些改进空间,所以Java9对它做了一些增强,主要内容包括:新的工厂方法支持超时和延迟执行支持子类化新的工厂方法在Java9中CompletableFuture新增了三个工厂方法。completedFuture()此方法用于创建一个已经完
对于大多数小伙伴而言,其实是很少使用只读集合的,甚至有蛮大一部分小伙伴可能都没有听过这个,大部分使用集合无非就是如下两种方式:List<String>list=newArrayList();orList<String>list=getXxxList();其实只读集合在编程中还是蛮有用处的,首先只读就意味着不可变,即线程安全,在使用它的过程中我们无需使用同步机制来保护其内部状态。同时只读集合通常比可变集合更加高效。因为它们是不可变的,不需要支持修改操作,因此在内部数据结构上可以进行优化,这可以提高数据访问的速度和降低内存开销。这篇文章我们来看看Java引入的一项重要特性—
我们知道Java8强势推出StreamAPI,让我们能够以一种更加简洁、易读、高效的方式来处理集合数据,大大地提高了我们的生产力,在文章StreamAPI对元素流进行函数式操作,大明哥对StreamAPI做了非常详细的说明,各位小伙伴可以去阅读阅读。为了提高StreamAPI的灵活性和性能,Java9对StreamAPI做了一些增强,主要体现在以下几个方法:新增ofNullable()重载iterate()新增dropWhile()和takeWhile()新增ofNullable()ofNullable()用于创建一个Stream,其中包含一个非空元素或者为空。该方法的主要目的是简化处理可能包
只要学过Java的小伙伴都需要知道,资源用了是要关闭的,否则会发生大麻烦,轻则被骂,重则滚蛋,不要以为是玩笑话,很严重的!!Java7之前,资源需要手动关闭我相信有5年以上工作经验的小伙伴一定写过这样的代码:FileInputStreamfileInputStream=null;try{fileInputStream=newFileInputStream("file.txt");//读取文件内容}catch(IOExceptione){//处理异常}finally{if(fileInputStream!=null){try{fileInputStream.close();}
在文章Optional解决NullPointerException大明哥详细的介绍如何利用Optional来解决NullPointerException。然后Java9对它又进行了一些增强,以提高其实用性和易用性。主要是增加三个方法:or()ifPresentOrElse()stream()下面就一一介绍这三个方法。or()or()方法定义如下:publicOptional<T>or(Supplier<?extendsOptional<?extendsT>>supplier);方法接受一个Supplier,当Optional为空时,将执行该Supplier,
大明哥相信绝大数小伙伴一定看过Java8的String源码,对于它的底层存储结构一定不陌生,在Java9之前,String的底层存储结构都是char[]:publicfinalclassStringimplementsjava.io.Serializable,Comparable<String>,CharSequence{//Thevalueisusedforcharacterstorage.privatefinalcharvalue[];}每个char都以2个字节存储在内存中。然而Oracle的JDK开发人员调研了成千上万个应用程序的heapdump信息,他们注意到大多数字符串都
从我们一接触接口开始我们就知道JavaInterface接口中是不能定义private私有方法的,但是这个在Java9中被打破了。为了减少代码重复,提高代码的可维护性,Java9接口支持私有方法,这样做有几个好处:接口更好地演化:在不破坏现有实现的前提下,我们可以向接口中添加默认方法,这是接口演化的一种方式。然后,如果默认方法之间有重复代码,就会导致代码容易重复。在接口中定义私有方法,可以将这些重复的代码抽离出来,使接口更容易维护和扩展。代码复用:将重复的,通用的功能封装在私有方法中,私有方法可以被接口中的其他方法调用,这有助于减少代码重复和提高代码的可维护性。防止子类滥用:由于私有方法只能在
熟悉Python和Scala之类的语言的小伙伴应该知道,他们在很早就已经有了交互式编程环境REPL(Read-Eval-PrintLoop),REPL以交互式的方式对语句和表达式进行求值。REPL提供了一个交互式的方式,允许开发人员输入代码,立即执行它,无需编译,然后查看执行结果。Java在Java9引入Java版的REPL工具:JavaShell。什么是JShellJavaShell是Java在Java9中引入的一个交互式编程工具,它可以让开发人员能够在一个命令行界面即时编写、编辑和执行Java代码片段,而无需创建和编译传统的Java源代码文件。JShell的目的是提供一个更快速、更便捷的方
Java9中最大的特性毫无疑问就是模块化,其实模块化的概念在Java7的时候就已经提出来了,由于它的复杂性,不断跳票,从Java7到Java8,最后Java9终于姗姗来迟,它的出现犹如壮士断腕。那模块化到底是什么呢?在实际开发中又有什么用呢?这篇文章大明哥带你彻底了解Java9的模块化。什么是模块化模块是Java9中新增的一个组件,官方是这么定义它的:**一个被命名的,代码和数据的自描述集合。(themodule,whichisanamed,self-describingcollectionofcodeanddata)。**怎么理解呢?我们可以简单地将它理解为package的上一级单位,是多个