官网地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html
(1)安装
“下一步”安装即可。
(2)配置环境变量
直接在Path中添加”C:\Program Files\Java\jdk-9\bin;”。
(3)安装验证
CMD中验证:
--> java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
(1)模块化管理
创建基本的java项目,目录结构如下:
--java9_pro\lib -->打包成模块化的jar
--java9_pro\mods -->已编译的代码
--java9_pro\src -->存放源码
(2)编写源代码
编写module-info.java(存放在src\com.zmzy.module):
module com.zmzy.module {
requires java.management;
requires jdk.incubator.httpclient;
}
创建Java类(存放在src\com.zmzy.module\com\zmzy\module):
package com.zmzy.module.com.zmzy.module;
public class HelloModule {
public static void main(String[] args) {
System.out.println("Hello Module!");
//获取Module对象
Module mod = HelloModule.class.getModule();
//获取类所在的模块名称
String modName = mod.getName();
//System.out.println("模块名称:"+ modName);
System.out.format("模块名称:%s%n",modName);
}
}
(3)编译模块化程序
1. 定位到源码目录:
cd D:\pd_workspaces\java9_pro
2. 使用javac命令进行编译(注意中文编码):
`D:\pd_workspaces\java9_pro>javac -d mods --module-source-path src
-encoding UTF-8
src\com.zmzy.module\module-info.java
src\com.zmzy.module\com\zmzy\module\HelloModule.java`
命令的含义:
-d mods
:编译后文件保存的目录;
--module-source-path src
:包含多个模块的源代码;
-encoding UTF-8
:指定编码方式。
(4)打包
使用jar进行打包:
`D:\pd_workspaces\java9_pro>jar --create --file lib/mymodule-1.0.jar
--main-class com.zmzy.module.com.zmzy.module.HelloModule
-C mods/com.zmzy.module .`
(5)运行
使用java命令运行程序:
`D:\pd_workspaces\java9_pro>java --module-path lib
--module com.zmzy.module/com.zmzy.module.com.zmzy.module.HelloModule`
Hello Module!
模块名称:com.zmzy.module
(1)JShell
类似于Scala、Python、R语言,无需javac java,不用写单元测试。
1. 进入JShell:
`C:\Users\zmzy>jshell`
| 欢迎使用 JShell -- 版本 9
| 要大致了解该版本, 请键入: /help intro
2. 使用JShell:
jshell> System.out.println("Hello JShell!");
Hello JShell!
jshell> int num = 10
num ==> 10
jshell> num
num ==> 10
jshell> "I Like Java !".substring(2,6)
$4 ==> "Like"
jshell> for(int i=0;i<10;i++){
...> System.out.println(i);
...> }
0
1
2
3
4
5
6
7
8
9
(2)Process API
获取PID方式一:
package com.zmzy.module.com.zmzy.module;
import java.lang.management.ManagementFactory;
public class GetPID01 {
public static void main(String[] args) {
//Runtime.getRuntime().exec("")
String name = ManagementFactory.getRuntimeMXBean().getName();
System.out.println(name);
//获取PID
String pid = name.split("@")[0];
System.out.println("PID:"+pid);
}
}
获取PID方式二:
package com.zmzy.module.com.zmzy.module;
public class GetPID02 {
public static void main(String[] args) {
ProcessHandle ph = ProcessHandle.current();
long pid = ph.pid();
System.out.println("PID:"+pid);
}
}
(3)集合方法
package com.zmzy.module.com.zmzy.module;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class MyCollections {
public static void main(String[] args) {
//创建List集合并填充元素
/*List list = new ArrayList<>();
list.add("zhangsan");
list.add("小明");*/
List list = List.of("zhangsan","小明");
System.out.println(list);
Map map = Map.of("num1",1,"num2",100);
System.out.println(map);
Set set = Set.of("apple","orange","pair");
System.out.println(set);
}
}
(4)接口私有化方法
package com.zmzy.module.com.zmzy.module;
public interface PrivateInterface {
void sayHello(); //普通写法
default void show(){ //java 8的使用方式
System.out.println("Show Info");
print();
}
private void print(){ //Java 9的使用方式
System.out.println("Hello!");
}
}
接口私有化方法解决了JDK 8.0 中默认方法不能是私有的,使用私有接口方法主要用于构建默认方法开发API。
(5)Http协议API
1. 替代了之前”HttpURLConnection”;
2. 提供支持WebSocket。
package com.zmzy.module.com.zmzy.module;
import jdk.incubator.http.HttpClient;
import jdk.incubator.http.HttpRequest;
import jdk.incubator.http.HttpResponse;
import java.io.IOException;
import java.net.URI;
public class MyHttpClient {
public static void main(String[] args) {
HttpClient hc = HttpClient.newHttpClient();
//创建HttpRequest
HttpRequest req = HttpRequest.newBuilder(URI.create("http://www.baidu.com")).GET().build();
try {
HttpResponse resp = hc.send(req, HttpResponse.BodyHandler.asString());
System.out.println(resp);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
(6)提供了处理JSON文本API
(7)移除已经被JDK 8.0 标记为过期的了GCC回收器