包含jdk8及之前的jdk版本,全部目录结构以及目录含义如图:java
jdk9以后,目录结构发生变化如图:数据结构
这个新特性只要了解下就能够了,这个目录结构是方便为了接下来新特性作保证iphone
怎么理解,怎么用呢?这个只是针对于java9来讲,至关于cmd工具,你能够和cmd同样,直接写方法等等,不过我认为只是适用于初学者作一些最简单的运算和写一些方法:jvm
在cmd中打开这个工具:maven
进入工具后能够作一些简单的java操做编辑器
。。。。等等,我认为只适用于初学者学习java不用其余编辑工具就能够学习java模块化
一个大型的项目,好比淘宝商城等,都会包含多个模块,好比订单模块,前台模块,后台管理模块,广告位模块,会员模块.....等等,各个模块之间会相互调用,不过这种状况下会不多,只针对特殊状况,若是一个项目有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 控制着那些包能够被模块访问,因此不被导出的包不能被其余模块访问
怎么理解呢?
好多公司用的jdk大部分仍是老版本,jdk6,7 都有,他们都不敢升级主要是由于兼容的问题,可是java9作到了这一点,就是无论公司的项目是用的java6,7,8甚至5,他均可以兼容不出错,打个比方,你以前用的是iphone5,如今出现了iPhone6,iphone7,iphon8和iphone9,可是你不敢买9,由于你本身已经适应了iphone5的全部手机的运行流程,6,7,8每一个手机的运行流程不同,可是这个9很强大,它可以识别你如今所用的版本iphone是5,因此当你升级到iphone9的时候,你的这个手机运行流程仍是iphone5的流程,只是在原有基础上拥有了更多的iphone9的全部优点。
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(){} }
//java7及之前 Map<String,String> map7 = new HashMap<String,String>(); //java8 <>没有了数据类型 Map<String,String> map8 = new HashMap<>(); //java9 添加了匿名内部类的功能 +{} Map<String,String> map9 = new HashMap<>(){};
首先看下jdk7,8,9 的try catch的比较
Java7处理方式:
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(){} }
java8 的处理方式:
@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(); } }
这下子应该一幕了然了吧
java8 以前 String _ ="hello"; 这样的标识符能够用,java9就用不到。
java8以前 String的底层结构类型都是 char[] ,可是java9 就替换成 byte[] 这样来说,更节省了空间和提升了性能
之因此替换是由于 以前一直是一个汉字一个两个字节,可是字母是一个字节,而一个char表明两个字节,由以前java8的utf-16 装换成了 utf-8/utf-16/latin三种存储方式
同理,StringBuilder StringBuffer也更换了底层数据结构********
在原有Stream API 新添加了4个方法,takeWhile dropWhile ofNullable iterate(新重载方法)
首先解释 takeWhile 当达到必定条件就结束:输出结果为45 43,如图
而 dropWhile 则和takeWhile 相反
ofNullable, 在java8中 Stream中的元素不能彻底为null,不然空指针异常,而在java9的升级中,容许建立null
iterate 不加条件无线循环
以往咱们都是经过maven添加httpclient ,java9直接引入便可