文档章节

Java9 新特性 详解

木九天
 木九天
发布于 02/23 14:59
字数 1804
阅读 9909
收藏 187
点赞 23
评论 47

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  把它所在的包导出 

module java9Demo{
    exports com.mdxl.layer_cj.entity;
}

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

module java9Test{
    requires 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的升级

        

public interface FilterProcess<T> {

    //java 7 及以前 特性  全局常量 和抽象方法
    public static final String a ="22";
    boolean process(T t);

    //java 8 特性 静态方法和默认方法
    default void love(){
        System.out.println("java8 特性默认方法");
    }
    static void haha(){
        System.out.println("java8 特性静态方法");
    }

    //java 8 特性 支持私有方法
    private void java9(){}
}

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

//java6及以前
Map<String,String> map7 = new HashMap<String,String>();
//java7和8 <>没有了数据类型
Map<String,String> map8 = new HashMap<>();
//java9 添加了匿名内部类的功能 后面添加了大括号{}  可以做一些细节的操作
Map<String,String> map9 = new HashMap<>(){};

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

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

    Java6处理方式:

//java7及以前写法  每一个流打开的时候都要关闭
@Test
public void test7(){
    InputStreamReader reader = null;
    try{
        reader = new InputStreamReader(System.in);
        reader.read();
    }catch (IOException e){
        e.printStackTrace();
    }finally {
        if (reader != null){
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

    java7,8 共同的处理方式:

//java7和8及 每一个流打开的时候都要关闭,但是在try的括号中来进行关闭
@Test
public void test7(){
    try(InputStreamReader reader =new InputStreamReader(System.in)){
        reader.read();
    }catch (IOException e){
        e.printStackTrace();
    }
}

    java9的处理方式:

//java9及 每一个流打开的时候都要关闭,但是在try的括号中来进行关闭,在
//java8的基础上进一步升级 直接在try括号中直接写入 变量就好,如果有多个流,就用分号隔开
//try(reader;writer){}
@Test
public void test7(){
    InputStreamReader reader =new InputStreamReader(System.in);
    try(reader){
        reader.read();
    }catch (IOException e){
        e.printStackTrace();
    }
}

    这下子应该一幕了然了吧

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所有特性都是为了提高性能和内存。。。。

© 著作权归作者所有

共有 人打赏支持
木九天
粉丝 40
博文 119
码字总数 72073
作品 0
海淀
程序员
加载中

评论(47)

木九天
木九天

引用来自“syzsp”的评论

楼主,可以转载吗

回复@syzsp : 可以
s
syzsp
楼主,可以转载吗
木九天
木九天

引用来自“开源中国首席一失足成千古风流人物以稀为贵”的评论

错误太多了...

哪里啊,我改下,请你说下,谢谢了
木九天
木九天
可以
Java-老刘
Java-老刘
您好,可以转载您的这篇文章吗?会注明原文作者,原文链接。谢谢~
木九天
木九天

引用来自“LC”的评论

引用来自“Smoothcraft”的评论

//java8
HashMap<String,String> map = new HashMap<String,String>{{//do sm}}
Double brace initialisation只能做初始化,
java9的特性是可以直接创建匿名内部类的,
用处完全不一样

回复@LC : 用这个做一些数据,方便测试的
LC
LC

引用来自“Smoothcraft”的评论

//java8
HashMap<String,String> map = new HashMap<String,String>{{//do sm}}
Double brace initialisation只能做初始化,
java9的特性是可以直接创建匿名内部类的,
用处完全不一样
木九天
木九天

引用来自“ExtreU”的评论

新特性的try-catch部分没有看明白,楼主能解释以下不?

回复@ExtreU : java9 的try后面括号中可以写try(reader) 但是java8必须是try(InputStram reader =new InputStream),所以java9可以把这行代码取出来,直接放入创建的流对象就好,你在结合博客看下
ExtreU
ExtreU
新特性的try-catch部分没有看明白,楼主能解释以下不?
Java9新特性系列(总结)

Java9新特性系列 Java9新特性系列(序) Java9新特性系列(JDK与JRE) Java9新特性系列(模块化系统:Jigsaw->Modularity) Java9新特性系列(深入理解模块化) Java9新特性系列(module&ma...

码上论剑 ⋅ 03/05 ⋅ 0

程序员必读Java9新特性示例(上)

明天又要上班了,又想到昨天看的最新一期的《极限挑战》。感慨时光还是转瞬即逝的。依稀记得刚入行的时候,JDK的版本还停留在Java 6。转眼现在已经到Java9了。既然是自己的职业,想必大家都有...

cnJason ⋅ 2017/11/08 ⋅ 0

Java9 正式发布前的尝鲜之下载与配置环境变量

前言 本文发布之时,java9还未正式发布,不过许多新特性已经暴露出来,并且提供了Early-Access Builds版本,包含了目前为止完整的各项功能,由于近期项目涉及到了java repl ,而java9正好提供...

nougats ⋅ 2017/07/27 ⋅ 0

Java 8新特性探究(8):精简的JRE详解

Oracle公司如期发布了Java 8正式版!没有让广大javaer失望。对于一个人来说,18岁是人生的转折点,从稚嫩走向成熟,法律意味着你是完全民事行为能力人,不再收益于未成年人保护法,到今年为止...

独孤环宇 ⋅ 2017/11/03 ⋅ 0

Java 8新特性探究(八)精简的JRE详解

Oracle公司如期发布了Java 8正式版!没有让广大javaer失望。对于一个人来说,18岁是人生的转折点,从稚嫩走向成熟,法律意味着你是完全民事行为能力人,不再收益于未成年人保护法,到今年为止...

成熟的毛毛虫 ⋅ 2014/03/24 ⋅ 32

Java9的新特性的总结

Java9的新特性总结 java9的新特性 模块化系统 模块化是一个很通用的概念。在软件中,模块化可以运用到编写和实现一个程序和计算系统,他们都是作为独立的模块,而不是作为一个单一的和完整的...

Panda_Jerry ⋅ 2017/11/28 ⋅ 0

zrlog 1.10 发布,Java 构建的简约且好用的开源博客程序

ZrLog是使用Java开发的博客/CMS程序,具有简约,易用,组件化,内存占用低等特点。自带Markdown编辑器,让更多的精力放在写作上,而不是花费大量时间在学习程序的使用上。 v1.5以后版本可通过...

hibegin ⋅ 05/08 ⋅ 0

Java9 HTTP2.0 API入门与实践

简述 如果您需要使用Java语言来请求HTTP资源,那么你可能会遇到多种解决方案,你最终可能会以一种合理的方式来达成这个目的 —– 引用第三方包。 好消息,好消息,黄鹤带着小姨子回来了,皮革...

rickiyeat ⋅ 2017/09/23 ⋅ 0

Spring Framework 5.0 RC3 发布

在 Spring 的资源库已看到 Spring 5.0 RC3 版本的压缩包,目前尚未同步到 Maven 仓库。 压缩包: http://repo.springsource.org/milestone/org/springframework/spring/5.0.0.RC3/ 此次更新包...

B超 ⋅ 2017/07/24 ⋅ 6

从java1到java9每个版本都有什么新特性?五分钟了解

     其实,我是个标题党,没有java1的说法,java9的新特性我也没总结。所以,来个关注吧,说不定哪天就出了呢。。。   每次出新版本,大家大概都会这么问,“Java X会有什么特性呢?”...

java进阶架构师 ⋅ 2017/11/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vim基础-编辑模式-命令模式

编辑模式:可以编辑修改文件。编辑模式下 按“esc”键返回一般模式。 按一次“Insert”键 (一般在键盘回格键右边)作用和“i”一样表示“插入”。按两次“Insert”键表示“替换”,作用为:...

ZHENG-JY ⋅ 13分钟前 ⋅ 0

MaxCompute读取分析OSS非结构化数据的实践经验总结

摘要: 本文背景 很多行业的信息系统中,例如金融行业的信息系统,相当多的数据交互工作是通过传统的文本文件进行交互的。此外,很多系统的业务日志和系统日志由于各种原因并没有进入ELK之类...

阿里云云栖社区 ⋅ 18分钟前 ⋅ 0

Linux操作系统有何优势?Linux学习

  当今世界流行的操作系统有3大类,Linux、Mac OS和Windows操作系统,Linux操作系统因其开源、免费、跨平台、良好的界面等特性,深受广大程序员们的青睐!   Linux操作系统被广泛的应用于...

老男孩Linux培训 ⋅ 20分钟前 ⋅ 0

Spring Cloud Spring Boot mybatis分布式微服务云架构 开发Web应用

静态资源访问 在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static /pub...

itcloud ⋅ 24分钟前 ⋅ 0

6月19日任务 设置更改root密码、连接mysql、mysql常用命令

13.1 设置更改root密码 1. /usr/local/mysql/bin/mysql -uroot 设置环境变量 : export PATH=$PATH:/usr/local/mysql/bin/ 永久生效: vim /etc/profile 加入 export PATH=$PATH:/usr/local/m......

吕湘颖 ⋅ 25分钟前 ⋅ 0

MaxCompute读取分析OSS非结构化数据的实践经验总结

摘要: 本文背景 很多行业的信息系统中,例如金融行业的信息系统,相当多的数据交互工作是通过传统的文本文件进行交互的。此外,很多系统的业务日志和系统日志由于各种原因并没有进入ELK之类...

猫耳m ⋅ 26分钟前 ⋅ 0

Spring MVC controller,return重定向redirect:

@RequestMapping(value="/save",method=RequestMethod.POST)public String doSave(Course course) {log.debug("Info of Course");log.debug(ReflectionToStringBuilder.toStr......

颖伙虫 ⋅ 34分钟前 ⋅ 0

JavaSE——线程介绍

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 线程: 介绍:管线程叫多任务处理,首先你得知道...

凯哥学堂 ⋅ 38分钟前 ⋅ 0

ORM——使用spring jpa data实现逻辑删除

前言 在业务中是忌讳物理删除数据的,数据的这个对于一个IT公司可以说是最核心的资产,如果删除直接就物理删除,无疑是对核心资产的不重视,可能扯的比较远,本文最主要是想通过spring jpa ...

alexzhu592 ⋅ 44分钟前 ⋅ 0

CDN caching

Incapsula应用感知CDN使用智能分析和频率分析来动态缓存内容,并最大限度地提高效率。确保可直接从RAM获取最常访问的资源,而不依赖于较慢的访问机制。 1、 静态内容缓存 Incapsula缓存静态内...

上树的熊 ⋅ 47分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部