1、switch支持String做參數(shù)
灌陽(yáng)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!
/*** * switch支持字符串做參數(shù) jdk7 * @author huangjiawei */ public class SwitchTest { public static void switchTest(String arg) { switch (arg) { case "Lisa": System.err.println("我是Lisa!"); break; case "Mike": System.err.println("我是Mike!"); break; default: System.err.println("我是你的唯一!"); break; } } public static void main(String[] args) { switchTest("Lisa");//我是Lisa! switchTest("Mike");//我是Mike! switchTest("");//我是你的唯一! } }
switch枚舉支持
/** * switch 枚舉支持 jdk5 * @author huangjiawei * */ public class SwitchMonthTest { public static void SwithMonthTest(Month month) { switch (month) { case JANUARY: System.err.println("這是一月份"); break; case FEBRUARY: System.err.println("這是二月份"); break; case MARCH: System.err.println("這是三月份"); break; } } public static void main(String[] args) { SwithMonthTest(Month.JANUARY);//這是一月份 SwithMonthTest(Month.FEBRUARY);//這是二月份 SwithMonthTest(Month.MARCH);//這是三月份 } }
2、數(shù)字字面量的改進(jìn)
2.1. Java7 前支持 十進(jìn)制(1234)、八進(jìn)制(01234)、十六進(jìn)制(0x1234)
Java 8支持二進(jìn)制(0B11110001)
2.2. 可以使用下劃線隔開(kāi)_
public class BinaryTest { private static int a = 16;//十進(jìn)制 private static int b = 020;//八進(jìn)制 private static int c = 0x10;//十六進(jìn)制 private static int d = 0b0001_0000;//二進(jìn)制,使用分隔符隔開(kāi) public static void main(String[] args) { System.err.println(a);//16 System.err.println(b);//16 System.err.println(c);//16 System.err.println(d);//16 } }
3、資源自動(dòng)關(guān)閉
在Java中,有許多的資源在使用完成之后需要對(duì)其進(jìn)行關(guān)閉操作。舉個(gè)栗子,InputStream,Writer,Sockets,Connection等等。在Java 7 之前通常都是顯示調(diào)用其close()方法,在Java 7,你可以不用理會(huì)其是否未關(guān)閉,我們可以使用try-with-resources代碼塊。
import java.io.BufferedReader; import java.io.FileReader; public class TryTest { /* * 接受一個(gè)文件的路徑 Java 7之前 */ public static String tryTest(String path) { BufferedReader br = null; try { br = new BufferedReader(new FileReader(path)); return br.readLine(); } catch (Exception e) { System.err.println("BufferedReader Exception" + e); } finally { if (br != null) { try { br.close(); br.ready();//流已經(jīng)關(guān)閉,此處拋出異常 } catch (Exception e) { System.err.println("BufferedReader close Exception" + e); } } } return ""; } /* * 接受一個(gè)文件的路徑 Java7 */ public static String tryTest1(String path) { /* * 當(dāng)try語(yǔ)句塊運(yùn)行結(jié)束時(shí),F(xiàn)ileInputStream 會(huì)被自動(dòng)關(guān)閉。這是因?yàn)镕ileInputStream 實(shí)現(xiàn)了java中的java.lang.AutoCloseable接口。 * 所有實(shí)現(xiàn)了這個(gè)接口的類(lèi)都可以在try-with-resources結(jié)構(gòu)中使用。 */ try (BufferedReader br = new BufferedReader(new FileReader(path))) { return br.readLine(); } catch (Exception e) { System.err.println("BufferedReader Exception" + e); } return ""; } public static void main(String[] args) { tryTest("C:\\Users\\huangjiawei\\Desktop\\my-release-key.keystore"); tryTest1("C:\\Users\\huangjiawei\\Desktop\\my-release-key.keystore"); } }
4、catch多個(gè)異常
Java7之前,捕獲多個(gè)異常必須有多個(gè)catch子句,在Java 7,我們可以這樣子寫(xiě):
import java.util.Date; /** * 多個(gè)catch語(yǔ)句永遠(yuǎn)只執(zhí)行第一個(gè)匹配到的catch異常,后面有再多的catch都會(huì)被忽略掉 * @author huangjiawei * */ public class CatchTest { /* * java 7以前 */ public static void CatchTest() { int a = 100; int b = 0; Date date = null; try { System.err.println(date.getTime());//這里拋出異常,下面的語(yǔ)句就不會(huì)執(zhí)行啦! int result = a/b;//不會(huì)執(zhí)行 System.err.println(result);//不會(huì)執(zhí)行 }catch(NullPointerException e) { System.err.println(e);//java.lang.NullPointerException }catch(ArithmeticException e){ System.err.println(e); }catch (Exception e) { System.err.println(e); } } /* * java 7 */ public static void CatchTest1() { int a = 100; int b = 0; Date date = null; try { int result = a/b; System.err.println(result); System.err.println(date.getTime()); }catch(ArithmeticException | NullPointerException e) { System.err.println(e);//java.lang.ArithmeticException: / by zero } } public static void main(String[] args) { CatchTest(); CatchTest1(); } }
5、實(shí)例創(chuàng)建類(lèi)型推斷
import java.util.ArrayList; import java.util.List; public class TypeTest { /* * java 7前,前后<>都必須聲明類(lèi)型 */ List<String> list = new ArrayList<String>(); /* * java 7,后<>不須聲明類(lèi)型,自動(dòng)根據(jù)前面<>推斷其類(lèi)型 */ List<String> list1 = new ArrayList<>(); }
6、增強(qiáng)的文件系統(tǒng)
Java7 推出了全新的NIO2.0 API以此改變針對(duì)文件管理的不便,使得在java.nio.file包下使用Path、Paths、Files、WatchService、FileSystem等常用類(lèi)型可以很好的簡(jiǎn)化開(kāi)發(fā)人員對(duì)文件管理的編碼工作。
6.1 Path接口和Paths類(lèi)
Path接口的某些功能其實(shí)可以和java.io包下的File類(lèi)等價(jià),當(dāng)然這些功能僅限于只讀操作。在實(shí)際開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員可以聯(lián)用Path接口和Paths類(lèi),從而獲取文件的一系列上下文信息。
聯(lián)用Path接口和Paths類(lèi)型獲取文件信息:
import java.nio.file.Path; import java.nio.file.Paths; public class PathPathsTest { public static void main(String[] args) { Path path = Paths.get("C:\\\\Users\\\\huangjiawei\\\\Desktop\\\\my-release-key.keystore"); System.out.println("文件節(jié)點(diǎn)數(shù):" + path.getNameCount()); //文件節(jié)點(diǎn)數(shù):4 System.out.println("文件名稱(chēng):" + path.getFileName()); //文件名稱(chēng):my-release-key.keystore System.out.println("文件根目錄:" + path.getRoot()); //文件根目錄:C:\ System.out.println("文件上級(jí)關(guān)聯(lián)目錄:" + path.getParent());//文件上級(jí)關(guān)聯(lián)目錄:C:\Users\huangjiawei\Desktop } }
6.2. Files類(lèi)
聯(lián)用Path接口和Paths類(lèi)可以很方便的訪問(wèn)到目標(biāo)文件的上下文信息。當(dāng)然這些操作全都是只讀的,如果開(kāi)發(fā)人員想對(duì)文件進(jìn)行其它非只讀操作,比如文件的創(chuàng)建、修改、刪除等操作,則可以使用Files類(lèi)型進(jìn)行操作。
Files類(lèi)型常用方法如下:
使用Files類(lèi)型復(fù)制、粘貼文件示例:
Files.copy(Paths.get("/test/src.xml"), Paths.get("/test/target.xml"));
使用Files類(lèi)型來(lái)管理文件,相對(duì)于傳統(tǒng)的I/O方式來(lái)說(shuō)更加方便和簡(jiǎn)單。因?yàn)榫唧w的操作實(shí)現(xiàn)將全部移交給NIO2.0 API,開(kāi)發(fā)人員則無(wú)需關(guān)注。
6.3. WatchService
Java7 還為開(kāi)發(fā)人員提供了一套全新的文件系統(tǒng)功能,那就是文件監(jiān)測(cè)。在此或許有很多朋友并不知曉文件監(jiān)測(cè)有何意義及目,那么請(qǐng)大家回想下調(diào)試成熱發(fā)布功能后的Web容器。當(dāng)項(xiàng)目迭代后并重新部署時(shí),開(kāi)發(fā)人員無(wú)需對(duì)其進(jìn)行手動(dòng)重啟,因?yàn)閃eb容器一旦監(jiān)測(cè)到文件發(fā)生改變后,便會(huì)自動(dòng)去適應(yīng)這些“變化”并重新進(jìn)行內(nèi)部裝載。Web容器的熱發(fā)布功能同樣也是基于文件監(jiān)測(cè)功能,所以不得不承認(rèn),文件監(jiān)測(cè)功能的出現(xiàn)對(duì)于Java文件系統(tǒng)來(lái)說(shuō)是具有重大意義的。
文件監(jiān)測(cè)是基于事件驅(qū)動(dòng)的,事件觸發(fā)是作為監(jiān)測(cè)的先決條件。開(kāi)發(fā)人員可以使用java.nio.file包下的StandardWatchEventKinds類(lèi)型提供的3種字面常量來(lái)定義監(jiān)測(cè)事件類(lèi)型,值得注意的是監(jiān)測(cè)事件需要和WatchService實(shí)例一起進(jìn)行注冊(cè)。
StandardWatchEventKinds類(lèi)型提供的監(jiān)測(cè)事件:
使用WatchService類(lèi)實(shí)現(xiàn)文件監(jiān)控完整示例:
import java.nio.file.FileSystems; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardWatchEventKinds; import java.nio.file.WatchEvent; import java.nio.file.WatchKey; import java.nio.file.WatchService; /** * 文件監(jiān)控系統(tǒng) * @author huangjiawei */ public class WatchViewTest { public static void testWatch() { /* 監(jiān)控目標(biāo)路徑 */ Path path = Paths.get("C:\\Users\\huangjiawei\\Desktop"); try { /* 創(chuàng)建文件監(jiān)控對(duì)象. */ WatchService watchService = FileSystems.getDefault().newWatchService(); /* 注冊(cè)文件監(jiān)控的所有事件類(lèi)型. */ path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY); /* 循環(huán)監(jiān)測(cè)文件. */ while (true) { WatchKey watchKey = watchService.take(); /* 迭代觸發(fā)事件的所有文件 */ for (WatchEvent<?> event : watchKey.pollEvents()) { System.out.println(event.context().toString() + " 事件類(lèi)型:" + event.kind()); } if (!watchKey.reset()) { return; } } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { testWatch(); } }
通過(guò)上述程序示例我們可以看出,使用WatchService接口進(jìn)行文件監(jiān)控非常簡(jiǎn)單和方便。首先我們需要定義好目標(biāo)監(jiān)控路徑,然后調(diào)用FileSystems類(lèi)型的newWatchService()方法創(chuàng)建WatchService對(duì)象。接下來(lái)我們還需使用Path接口的register()方法注冊(cè)WatchService實(shí)例及監(jiān)控事件。當(dāng)這些基礎(chǔ)作業(yè)層全部準(zhǔn)備好后,我們?cè)倬帉?xiě)外圍實(shí)時(shí)監(jiān)測(cè)循環(huán)。最后迭代WatchKey來(lái)獲取所有觸發(fā)監(jiān)控事件的文件即可。
現(xiàn)在我終于知道,spring boot中那個(gè)所謂的dev-tools熱更新的基本原理啦!原來(lái)JDK都有提供這樣的API。
總結(jié)
以上所述是小編給大家介紹的JDK 7 新特性小結(jié)實(shí)例代碼解析,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!
分享文章:JDK7新特性小結(jié)實(shí)例代碼解析
標(biāo)題來(lái)源:http://muchs.cn/article2/iejdoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、軟件開(kāi)發(fā)、App開(kāi)發(fā)、品牌網(wǎng)站建設(shè)、網(wǎng)站改版、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)