Java Language Changes for Java SE 9

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 Java7&8: try(Resource r1=resource1;Resources r2=resource2){}
  //@SafeVarargs可用于static、final、private方法,Iterator<String> i=new 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.Entry<K,V> … entries),Map.entry(“K”,”V”)可以提供entryies參數
  //內部實現使用了wrapper對象,原始集合還是可以更改但不建議,unmodifiable集合可用于并行計算,避免很多場合下的集合復制,多個重載方法是為更好性能
進程ProcessHandle增強
  Process p=new ProcessBuilder(“notepad.exe”).start();//老版本:Runtime.getRuntime().exec(String),Process.waitFor()進程退出后才會執行后續代碼
  ProcessHandle ph = Process.toHandle(); //long getPid()等方法直接代理給了ProcessHandle.getPid(),當前進程ProcessHandle.current()
  Info i=ProcessHandle.info(); //Info包含了進程命令信息,Optional<String[]> args=Info.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.class,JDK10則對應10目錄
  //例如獲取pid的不同方法,可提供多JDK支持的jar包,JarFile.isMultiRelease()
  //JDK8及以前:jvmName = ManagementFactory.getRuntimeMXBean().getName(); index = jvmName.indexOf('@'); pid=index<1?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> action,StackFrame支持fileName、methodName、lineNumber等信息
  long numFrames = sw.walk(frames_ -> frames_.count()); //forEach()等價于walk(s -> { s.forEach(action); return null; });
發布訂閱框架
  SubmissionPublisher<String> publisher = new SubmissionPublisher<>();
  MySubscriber<String> subscriber = new MySubscriber<>(); //class MySubscriber<T> implements Subscriber<T>{void onSubscribe(Subscription subscription)}
  publisher.subscribe(subscriber); publisher.submit(“A”); publisher.close();



轉載于:https://www.cnblogs.com/xingqi/p/9959688.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249013.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249013.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249013.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ProtocolHandler繼承體系

轉載于:https://www.cnblogs.com/GooPolaris/p/10815072.html

mysql數據庫存儲過程及調用方法

mysql數據庫存儲過程及調用方法 mysql5.0以后就支持存儲過程了&#xff0c;目前mysql的6.0Alpha版也已經推出。6.0不僅支持大型數據庫如oracle等的絕大部分功 能&#xff0c;如存儲過程、視圖、觸發器、job等等&#xff0c;而且修正了這些功能所存在的bug&#xff0c;其中6.0.1…

紅蜻蜓

日本人なら一度は耳にしたことのある曲でしょう。忘れかけている里山の風景が目に浮かびます。このあたりは昔養蠶が盛んで、何処へ行っても桑畑があったものでしたが、最近はとんと見かけません。小さい頃、よく桑の実をつんで食べたものでした。&#xff08;このあたりでは&q…

elastic學習筆記

要點 不同工具之間版本匹配很重要由點及面&#xff0c;先實踐起來再學細節的原理和使用 技術棧 laravel5.5框架scout組件elasticsearch6.3.0搜索引擎輔助 elasticsearch-head 查看集群數據可視化 中文分詞插件Ik介紹 laravel是一款現代化的php框架es是搜索引擎es-head是管理查看…

mysql 存儲過程中limit

mysql 存儲過程中limit 1、mysql的高版本&#xff08;5.5&#xff09;&#xff0c;存儲過程中的limit可以使用變量&#xff0c;如下&#xff1a;select * from student limit iStart,iNum; 2、mysql的低版本&#xff08;5.1&#xff09;&#xff0c;存儲過程中的limit不能使用…

高頻ES6

var promise new Promise((resolve, reject)> {if (操作成功) {resolve (value)}else{reject(error)} }) promise.than(function (value) {/*成功*/}, function(value) {/*失敗*/}) Promise是異步編程的一種解決方案, 比傳統的解決方案--回調函數和事件更加強大.由社區最早…

NodeJS+Express+MongoDB - 張果 - 博客園

目錄 一、MongoDB 1.1、安裝MongoDB 1.1.1、配置運行環境1.1.2、運行MongoDB1.2、數據庫操作 1.2.1、創建數據庫與查看數據庫1.2.2、刪除數據庫1.2.3、插入數據1.2.4、查詢數據1.2.5、修改1.2.6、刪除二、NodeJS訪問MongoDB 2.1、安裝MongoDB訪問驅動2.2、添加數據2.3、修改數…

一個好用的瀏覽器暗色瀏覽插件 Dark Reader

轉載于:https://www.cnblogs.com/tyong/p/9973363.html

Android小測驗感受

1.運行出現“...keeps stopping” 因為 前臺變量“無值”而后臺卻進行“獲取變量值” 2.switch(int,char...) case break;(不能忘) 3.轉載于:https://www.cnblogs.com/tangxx1996/p/10825134.html

SpringMVC ?注解式傳遞Ztree參數

前端頁面JS處理&#xff1a; $("#save").click( function(){var zTree $.fn.zTree.getZTreeObj("treeDemo" );if(projectType "" || projectType null || projectType undefined){alert( "請選擇項目類型&#xff01;" ); return…

實驗 4 [bx]和 loop 的使用

實驗結論 實驗1&#xff1a;綜合使用 loop,[bx]&#xff0c;編寫完整匯編程序&#xff0c;實現向內存 b800:07b8 開始的連續 16 個字單元重復填充字數據 0403H。 1.源代碼及實驗結果 運行結果&#xff1a;屏幕中央出現一排紅色的心?。 2.將源代碼程序中字數據 0403H→修改為 0…

linux開發工具之gcc

首先gcc編譯鏈接的一個實例如下所示&#xff1a; 接下來看一下gcc的常見選項&#xff1a; gcc的使用示例&#xff1a; 轉載于:https://www.cnblogs.com/wsw-seu/p/10826124.html

怎么解決eclipse報PermGen space異常的問題

怎么解決eclipse報PermGen space異常的問題 最近使用eclipse做開發&#xff0c;使用的服務器是tomcat&#xff0c;但在啟動時報了Caused by: java.lang.OutOfMemoryError: PermGen space的異常。 這個錯誤很常見&#xff0c;于是配置tomcat下的catalina.bat&#xff0c;配置e…

org.hibernate.service.ServiceRegistryBuilder被棄用

看視頻教程是這樣寫的: //創建配置對象Configuration config new Configuration().configure();//創建服務注冊對象ServiceRegistry serviceRegistry new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();//創建會話工廠對象session…

音頻基本概念

音頻基本概念 聲音的本質 音調&#xff1a;頻率 音量&#xff1a;振幅 音色&#xff1a;與材質有關&#xff0c;諧波&#xff08;不規則的正玄波&#xff09; 屏幕快照 2018-12-04 下午1.53.40.png采樣-量化-編碼 采樣大小&#xff1a; 一個采樣用多少bit存放&#xff0c;目前常…

How to use external classes and PHP files in Laravel Controller?

By: Povilas KoropLaravel is an MVC framework with its own folder structure, but sometimes we want to use something external which doesn’t follow the same structure. Let’s review two different scenarios – when we have external class and when it’s just a…

在多種瀏覽器中嵌入Applet

1 基本信息 摘要&#xff1a;一個開發好的Java Applet&#xff0c;是通過標準的標簽&#xff08;Tag&#xff09;嵌入到HTML頁面中的。瀏覽器在解析到支持的嵌入Applet的標簽時&#xff0c;會啟動Java Plug-in來渲染標簽中的Java Applet。 由于歷史原因&#xff0c;在頁面中嵌…

share團隊沖刺3

團隊沖刺第三天 昨天&#xff1a;完成了對輸出文字&#xff0c;按鈕控件的添加&#xff0c;能夠將其在模擬器上運行 今天&#xff1a;學習輸入的添加方式 問題&#xff1a;Android resource linking failed 在改變按鈕樣式的時候&#xff0c;出現了這個問題&#xff0c;正在百度…

Django學習手冊 - ORM 數據創建/表操作 匯總

ORM 查詢的數據類型: QuerySet與惰性機制(可以看作是一個列表) 所謂惰性機制:表名.objects.all()或者.filter()等都只是返回了一個QuerySet&#xff08;查詢結果集對象&#xff09;&#xff0c;它并不會馬上執行sql&#xff0c;而是當調用QuerySet的時候才執行。 QuerySet特點&…

applet實現大文件ftp上傳(三)

下一步呢&#xff0c;當然就是對這個jar文件進行數字證書包裝。流程如下&#xff1a; <1>、生成密匙證書(key certificate)&#xff0c;該證書將存儲在你的.keystore文件中。Validity指的是密匙的有效期&#xff0c;默認是180&#xff0c;但是這里我們需要一年的時間&am…