网站设计开发,建设飞鹰摩托车官方网站,电子商务网站建设 故宫官网,手机网站开发框架Java9引入了module模块的概念#xff0c;是类与接口和数据资源的一种封装#xff0c;并可以声明与其他模块的依赖关系。这里总结一下Java9带来的新特性。更简练的try-with-resources语句final Resource resource1 new Resource(resource1);//a final resourceRe… Java9引入了module模块的概念是类与接口和数据资源的一种封装并可以声明与其他模块的依赖关系。这里总结一下Java9带来的新特性。更简练的try-with-resources语句 final Resource resource1 new Resource(resource1);//a final resource Resource resource2 new Resource(resource2);//An effectively final resource try(resource1;resource2){}//in Java78: try(Resource r1resource1;Resources r2resource2){} //SafeVarargs可用于static、final、private方法IteratorString inew Iterator(){}钻石符号可用于匿名类下划线不能再用于变量名集合工厂方法增强 List.of(E e1, E e2, E e3); //有多个重载方法老版本Arrays.asList(“a”,”b”)Stream.of(“a”,”b”).collect(toList()) Set.of(E … elements); //of工厂方法创建的都是unmodifiable不可更改的集合可使用new ArrayList(unmodifiable)再次包装 Map.of(K k1, V v1, K k2, V v2); //ofEntries(Map.EntryK,V … entries)Map.entry(“K”,”V”)可以提供entryies参数 //内部实现使用了wrapper对象原始集合还是可以更改但不建议unmodifiable集合可用于并行计算避免很多场合下的集合复制多个重载方法是为更好性能进程ProcessHandle增强 Process pnew ProcessBuilder(“notepad.exe”).start();//老版本Runtime.getRuntime().exec(String)Process.waitFor()进程退出后才会执行后续代码 ProcessHandle ph Process.toHandle(); //long getPid()等方法直接代理给了ProcessHandle.getPid()当前进程ProcessHandle.current() Info iProcessHandle.info(); //Info包含了进程命令信息OptionalString[] argsInfo.arguments(); 命令Info.command().orElse(“”) //onExit().thenAccept(ph – System.out.println(“PID %d terminated%n”, ph.getPid())); 使用lamda响应进程退出信息onExit().get()等待进程多版本三方包Multi-Release Jar META-INFO/MANIFEST.MF包含条目 Multi-Release: true META-INFO/releases/9/A.class在JDK9时可替代/A.classJDK10则对应10目录 //例如获取pid的不同方法可提供多JDK支持的jar包JarFile.isMultiRelease() //JDK8及以前jvmName ManagementFactory.getRuntimeMXBean().getName(); index jvmName.indexOf(); pidindex1?0:jvmName.substring(0, index); //JDK9及以后ProcessHandle.current().getPid(); jar cfe pid.jar PrintPID -C v1 PrintPID.class -C v1 Util.class --release 9 -C v2 Util.class //java –jar pid.jar支持JDK8和JDK9调用栈访问StackWalker StackTraceElement[] stackTrace new Throwable().getStackTrace(); //老的方式比较耗性能 StackWalker sw2 StackWalker.getInstance(); //options可选RETAIN_CLASS_REFERENCE、SHOW_HIDDEN_FRAMES sw.forEach(System.out::println); //Consumer? super StackWalker.StackFrame actionStackFrame支持fileName、methodName、lineNumber等信息 long numFrames sw.walk(frames_ - frames_.count()); //forEach()等价于walk(s - { s.forEach(action); return null; });发布订阅框架 SubmissionPublisherString publisher new SubmissionPublisher(); MySubscriberString subscriber new MySubscriber(); //class MySubscriberT implements SubscriberT{void onSubscribe(Subscription subscription)} publisher.subscribe(subscriber); publisher.submit(“A”); publisher.close(); 转载于:https://www.cnblogs.com/xingqi/p/9959688.html