JavaSEDevelopmentKit已经正式推出了全新的jdk9,但是许多用户都在网上传谣说jdk9没有32位版本的,其实jdk9暂未放弃32位运行环境推出了32位版,用户朋友可以下载使用32位的jdk9进行开发。
基本简介
JavaSE,JDK9现已正式发布!首先新功能jshell无疑让JAVA再次领先其它编程语言和平台10年以上!java开发者们再也不用羡慕别的自带REPL的语言了,不用为了试个Java功能而开个Groovyshell了。其次最主要的大功能就是Jigsaw——Java模块化了,有了它,自己定制/裁剪JDK变得更直接。
JDK(JavaDevelopmentKit)是整个Java的核心,包括了Java运行环境、Java开发工具和Java基础类库源代码。JDK作为JAVA开发的环境,是运行JAVA程序不可缺少的环境,不管是做JAVA开发还是做安卓开发,都必须在电脑上安装JDK。小到小型设备,大到智慧城市,Java的贡献力量是其他任何技术无可比拟的。
开发组成
javac–编译器,将源程序转成字节码
jar–打包工具,将相关的类文件打包成一个文件
javadoc–文档生成器,从源码注释中提取文档
jdb–debugger,查错工具
java–运行编译后的java程序(. class后缀的)
appletviewer:小程序浏览器,一种执行html文件上的Java小程序的Java浏览器。
Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
Jconsole:Java进行系统调试和监控的工具
软件特色
1. Java平台级模块系统
Java9的定义功能是一套全新的模块系统。当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。这时候就得面对两个基础的问题:很难真正地对代码进行封装,而系统并没有对不同部分(也就是JAR文件)之间的依赖关系有个明确的概念。每一个公共类都可以被类路径之下任何其它的公共类所访问到,这样就会导致无意中使用了并不想被公开访问的API。此外,类路径本身也存在问题:你怎么知晓所有需要的JAR都已经有了,或者是不是会有重复的项呢?模块系统把这俩个问题都给解决了。
模块化的JAR文件都包含一个额外的模块描述器。在这个模块描述器中,对其它模块的依赖是通过“requires”来表示的。另外,“exports”语句控制着哪些包是可以被其它模块访问到的。所有不被导出的包默认都封装在模块的里面。如下是一个模块描述器的示例,存在于“module-info.java”文件中:
moduleblog{
exportscom.pluralsight.blog;
requirescms;
}
2.Linking
当你使用具有显式依赖关系的模块和模块化的JDK时,新的可能性出现了。你的应用程序模块现在将声明其对其他应用程序模块的依赖以及对其所使用的JDK模块的依赖。为什么不使用这些信息创建一个最小的运行时环境,其中只包含运行应用程序所需的那些模块呢?这可以通过Java9中的新的jlink工具实现。你可以创建针对应用程序进行优化的最小运行时映像而不需要使用完全加载JDK安装版本。
3.JShell:交互式JavaREPL
许多语言已经具有交互式编程环境,Java现在加入了这个俱乐部。您可以从控制台启动jshell,并直接启动输入和执行Java代码。jshell的即时反馈使它成为探索API和尝试语言特性的好工具。
测试一个Java正则表达式是一个很好的说明jshell如何使您的生活更轻松的例子。交互式shell还可以提供良好的教学环境以及提高生产力,您可以在此了解更多信息。在教人们如何编写Java的过程中,不再需要解释“publicstaticvoidmain(String[]args)”这句废话。
4.改进的Javadoc
有时一些小事情可以带来很大的不同。你是否就像我一样在一直使用Google来查找正确的Javadoc页面呢?这不再需要了。Javadoc现在支持在API文档中的进行搜索。另外,Javadoc的输出现在符合兼容HTML5标准。此外,你会注意到,每个Javadoc页面都包含有关JDK模块类或接口来源的信息。
5.集合工厂方法
通常,您希望在代码中创建一个集合(例如,List或Set),并直接用一些元素填充它。实例化集合,几个“add”调用,使得代码重复。Java9,添加了几种集合工厂方法:
Set<Integer>ints=Set.of(1,2,3);
List<String>strings=List.of("first","second");
除了更短和更好阅读之外,这些方法也可以避免您选择特定的集合实现。事实上,从工厂方法返回已放入数个元素的集合实现是高度优化的。这是可能的,因为它们是不可变的:在创建后,继续添加元素到这些集合会导致“UnsupportedOperationException”。
6.改进的StreamAPI
长期以来,StreamAPI都是Java标准库最好的改进之一。通过这套API可以在集合上建立用于转换的申明管道。在Java9中它会变得更好。Stream接口中添加了4个新的方法:dropWhile,takeWhile,ofNullable。还有个iterate方法的新重载方法,可以让你提供一个Predicate(判断条件)来指定什么时候结束迭代:
IntStream.iterate(1,i->i<100,i->i+1).forEach(System.out::println);
第二个参数是一个Lambda,它会在当前IntStream中的元素到达100的时候返回true。因此这个简单的示例是向控制台打印1到99。
除了对Stream本身的扩展,Optional和Stream之间的结合也得到了改进。现在可以通过Optional的新方法`stram`将一个Optional对象转换为一个(可能是空的)Stream对象:
Stream<Integer>s=Optional.of(1).stream();
在组合复杂的Stream管道时,将Optional转换为Stream非常有用。
7.私有接口方法
Java8为我们带来了接口的默认方法。接口现在也可以包含行为,而不仅仅是方法签名。但是,如果在接口上有几个默认方法,代码几乎相同,会发生什么情况?通常,您将重构这些方法,调用一个可复用的私有方法。但默认方法不能是私有的。将复用代码创建为一个默认方法不是一个解决方案,因为该辅助方法会成为公共API的一部分。使用Java9,您可以向接口添加私有辅助方法来解决此问题:
publicinterfaceMyInterface{
voidnormalInterfaceMethod();
defaultvoidinterfaceMethodWithDefault(){ init();}
defaultvoidanotherDefaultMethod(){init();}
//ThismethodisnotpartofthepublicAPIexposedbyMyInterface
privatevoidinit(){System.out.println("Initializing");}
}
如果您使用默认方法开发API,那么私有接口方法可能有助于构建其实现。
8.HTTP/2
Java9中有新的方式来处理HTTP调用。这个迟到的特性用于代替老旧的`HttpURLConnection`API,并提供对WebSocket和HTTP/2的支持。注意:新的HttpClientAPI在Java9中以所谓的孵化器模块交付。也就是说,这套API不能保证100%完成。
9.多版本兼容JAR
我们最后要来着重介绍的这个特性对于库的维护者而言是个特别好的消息。当一个新版本的Java出现的时候,你的库用户要花费数年时间才会切换到这个新的版本。这就意味着库得去向后兼容你想要支持的最老的Java版本(许多情况下就是Java6或者7)。这实际上意味着未来的很长一段时间,你都不能在库中运用Java9所提供的新特性。
配置命令
CMD命令提示符输入java-version
最新特性
—最好玩的新功能当属jshell,有了它无疑让JAVA再次领先其它编程语言和平台10年以上!骑士继续流行20年也完全没有问题。因为它和Graal+Truffle、SubstrateVM开启了无限可能!!Java开发们们再也不用羡慕别的自带REPL的语言了,不用为了试个Java功能而开个Groovyshell了。
—最主要的大功能就是Jigsaw——Java模块化了,有了它,自己定制/裁剪JDK变得更直接,而包冲突也会变得更容易发现和解决。
—作为JVM的JIT编译器研发,最关注的功能是JVMCI,有了它之后,第三方开发就可以更为方便的向HotSpotVM插入一些强大的插件,例如说可以从外部配置插入一个新的JIT编译器。这样,要在HotSpotVM上使用Graal编译器就非常容易了,不必再专门用改造过的GraalVM。OracleJDK9计划在未来的某个update版本里发布配套的AOT编译器,而这个AOT编译器正是基于Graal与JVMCI的。
—OracleJDK9/OpenJDK9把G1作为默认GC选项,如果要选用ParallelGC、CMSGC等别的GC的话则要显式在命令行上指定。这对目前正在使用CMSGC的人来说多半没什么影响,毕竟现在用CMSGC也要显式配置-XX:+UseConcMarkSweepGC选项。而对目前因
jdk
java开发
java编程