环境准备
jdk下载地址
Java版本向下兼容,直接下载16或以上版本
jdk安装
将下载后tar包解压到对应路径即可
idea创建Java项目
选择安装好的Java版本
Java-9新特性
钻石操作符语法升级
代码中new Person<>();中<>的泛型可以省略
public class Demo1 {
public static void main(String[] args) {
Person<String> person = new Person<>(){
@Override
public void run(String t) {
System.out.println("Person run. Override, t:" + t);
}
};
person.run("123");
}
}
class Person<T> {
public void run(T t) {
System.out.println("Person run. t=" + t);
}
}
try语句升级
public class Demo2 {
public static void main(String[] args) throws FileNotFoundException {
// java7
InputStreamReader isr = null;
try {
isr = new InputStreamReader(new FileInputStream("C:\\Users\\16619\\test.txt"));
int read = isr.read();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (isr != null) {
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// java8
try (InputStreamReader isr2 = new InputStreamReader(new FileInputStream("C:\\Users\\16619\\test.txt"))) {
int read = isr2.read();
} catch (Exception e) {
e.printStackTrace();
}
// java9
InputStreamReader isr3 = new InputStreamReader(new FileInputStream("C:\\Users\\16619\\test.txt"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\16619\\test.txt"));
try (isr3; osw) {
int read = isr3.read();
} catch (Exception e) {
e.printStackTrace();
}
}
}
下划线标识符限制(了解)
Java9开始不允许使用"_"单独作为标识符
接口私有方法
public class Demo4 {
}
/**
* Java7
* 接口中只能有抽象方法
*/
interface Inter1 {
void methodA();
}
/**
* Java8
* 接口中可以定义static/default修饰的非抽象方法
*/
interface Inter2 {
static void methodA() {
}
default void methodB() {
}
}
/**
* Java9
* 接口中可以定义static/default/private修饰的非抽象方法
*/
interface Inter3 {
static void methodA() {
}
default void methodB() {
methodC();
}
private void methodC() {
System.out.println("i am private.");
}
}
String底层存储结构变化
Java8
使用cahr[],占用空间16bit
Java9
byte[],占用空间8bit
原因:大多数String对象只包含latin-1字符,这样的字符只需要一个字节的储存空间,因此这样的String对象内部的字符数组有一半的空间是没用的。