没有模块化之前 Java 中存在的问题:
Java 9 的模块化是通过工程 Jigsaw 引入的
参考链接 http://openjdk.java.net/projects/jigsaw/
The primary goals of this Project were to:
- Make it easier for developers to construct and maintain libraries
- and large applications;
- Improve the security and maintainability of Java SE Platform Implementations in general, and the JDK in particular;
- Enable improved application performance; and
- Enable the Java SE Platform, and the JDK, to scale down for use in small computing devices and dense cloud deployments.
Jigsaw 的主体被拆分分以下 6 个部分:
Java 9 模块化系统的优点:
https://www.journaldev.com/12850/java-9-private-methods-interfaces
在 Java 7 中,接口中只能有两种东西
public interface Java7Interface {
// 默认省略 public
public int constVariable = 0;
// 默认省略 public abstract
void abstractMethod();
}
在 Java 8 中,接口中可以有默认方法和静态方法,但是这些方法都是公有的,
public interface Java8Interface {
// 默认省略 public
default void defaultMethod() {
System.out.println("I am a default method");
}
// 默认省略 public
static void staticMethod() {
System.out.println("I am a static method");
}
}
在 Java 9 中,允许在接口中使用私有方法
public interface Java9Interface {
private void privateMethod() {
System.out.println("I am a private static");
}
private static void privateStaticMethod(){
System.out.println("I am a private static method");
}
// 编译错误,只有接口私有方法,没有私有接口变量
// private int privateVariable = 0;
}
Java 9 中,接口私有方法使用规则:
必须用private
显式声明
private
修饰符无法与abstract
共存,否则会导致编译错误
private
方法表示这个方法已经被接口实现,子类无法继承和覆盖abstract
方法表示这个这个方法还没有实现,子类必须继承并覆盖private
修饰符代表最低的可见性
为什么需要接口私有方法 Java8 中,若接口的默认方法如果有重复的代码,则无法封装重用,因此使用接口私有方法可以:
Java 9 提供了一个交互式的编程环境, REPL(Read Evaluate Print Loop).可以从控制台启动 JShell 来使用
G:\>jshell
| Welcome to JShell -- Version 9-ea
| For an introduction type: /help intro
jshell> int a = 10
a ==> 10
jshell> System.out.println("a value = " + a )
a value = 10
Java 9 中引入了一些便捷的方法用来创建不可修改的 List,Set,Map 和 Map.Entry.
List immutableList = List.of();
List immutableList = List.of("one","two","three");
Java 9 中 Stream 接口增加了有些便捷的方法,如dropWhile和takeWhile
https://www.journaldev.com/12940/javase9-try-with-resources-improvements
Java 7 中的 try-with-resource
void testARM_Before_Java9() throws IOException{
BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
try (BufferedReader reader2 = reader1) {
System.out.println(reader2.readLine());
}
}
Java 9 中的 try-with-resource
void testARM_Java9() throws IOException{
BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
try (reader1) {
System.out.println(reader1.readLine());
}
}