欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JDK 7 新特性小結(jié)實(shí)例代碼解析

 更新時(shí)間:2018年03月08日 17:18:14   作者:曾夢(mèng)想仗劍走天涯  
這篇文章通過(guò)實(shí)例代碼給大家介紹了JDK 7 新特性小結(jié)篇,感興趣的朋友一起看看吧

1、switch支持String做參數(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è)接口的類都可以在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,我們可以這樣子寫:

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)建類型推斷

import java.util.ArrayList;
import java.util.List;
public class TypeTest {
 
 /*
 * java 7前,前后<>都必須聲明類型
 */
 List<String> list = new ArrayList<String>();
 
 /*
 * java 7,后<>不須聲明類型,自動(dòng)根據(jù)前面<>推斷其類型
 */
 List<String> list1 = new ArrayList<>();
}

6、增強(qiáng)的文件系統(tǒng)

Java7 推出了全新的NIO2.0 API以此改變針對(duì)文件管理的不便,使得在java.nio.file包下使用Path、Paths、Files、WatchService、FileSystem等常用類型可以很好的簡(jiǎn)化開(kāi)發(fā)人員對(duì)文件管理的編碼工作。

6.1 Path接口和Paths類

Path接口的某些功能其實(shí)可以和java.io包下的File類等價(jià),當(dāng)然這些功能僅限于只讀操作。在實(shí)際開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員可以聯(lián)用Path接口和Paths類,從而獲取文件的一系列上下文信息。

  • int getNameCount(): 獲取當(dāng)前文件節(jié)點(diǎn)數(shù)
  • Path getFileName(): 獲取當(dāng)前文件名稱
  • Path getRoot(): 獲取當(dāng)前文件根目錄
  • Path getParent(): 獲取當(dāng)前文件上級(jí)關(guān)聯(lián)目錄

聯(lián)用Path接口和Paths類型獲取文件信息:

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("文件名稱:" + path.getFileName()); //文件名稱: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類

聯(lián)用Path接口和Paths類可以很方便的訪問(wèn)到目標(biāo)文件的上下文信息。當(dāng)然這些操作全都是只讀的,如果開(kāi)發(fā)人員想對(duì)文件進(jìn)行其它非只讀操作,比如文件的創(chuàng)建、修改、刪除等操作,則可以使用Files類型進(jìn)行操作。
Files類型常用方法如下:

  • Path createFile(): 在指定的目標(biāo)目錄創(chuàng)建新文件
  • void delete(): 刪除指定目標(biāo)路徑的文件或文件夾
  • Path copy(): 將指定目標(biāo)路徑的文件拷貝到另一個(gè)文件中
  • Path move(): 將指定目標(biāo)路徑的文件轉(zhuǎn)移到其他路徑下,并刪除源文件

使用Files類型復(fù)制、粘貼文件示例:

Files.copy(Paths.get("/test/src.xml"), Paths.get("/test/target.xml"));

使用Files類型來(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類型提供的3種字面常量來(lái)定義監(jiān)測(cè)事件類型,值得注意的是監(jiān)測(cè)事件需要和WatchService實(shí)例一起進(jìn)行注冊(cè)。

StandardWatchEventKinds類型提供的監(jiān)測(cè)事件:

  • ENTRY_CREATE:文件或文件夾新建事件;
  • ENTRY_DELETE:文件或文件夾刪除事件;
  • ENTRY_MODIFY:文件或文件夾粘貼事件;

使用WatchService類實(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)控的所有事件類型. */
     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() + " 事件類型:" + 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類型的newWatchService()方法創(chuàng)建WatchService對(duì)象。接下來(lái)我們還需使用Path接口的register()方法注冊(cè)WatchService實(shí)例及監(jiān)控事件。當(dāng)這些基礎(chǔ)作業(yè)層全部準(zhǔn)備好后,我們?cè)倬帉懲鈬鷮?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ì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 詳解Spring Boot加載properties和yml配置文件

    詳解Spring Boot加載properties和yml配置文件

    本篇文章主要介紹了詳解Spring Boot加載properties和yml配置文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • springboot運(yùn)行時(shí)新增/更新外部接口的實(shí)現(xiàn)方法

    springboot運(yùn)行時(shí)新增/更新外部接口的實(shí)現(xiàn)方法

    這篇文章主要介紹了springboot運(yùn)行時(shí)新增/更新外部接口的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java入門案列之猜拳小游戲

    Java入門案列之猜拳小游戲

    這篇文章主要為大家詳細(xì)介紹了Java入門案列之猜拳小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Java中@Accessors注解的具體使用

    Java中@Accessors注解的具體使用

    @Accessors是Lombok提供的注解之一,用于自動(dòng)生成getter和setter方法,本文主要介紹了@Accessors注解的常用屬性,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 關(guān)于mybatis if else if 條件判斷SQL片段表達(dá)式取值和拼接問(wèn)題

    關(guān)于mybatis if else if 條件判斷SQL片段表達(dá)式取值和拼接問(wèn)題

    這篇文章主要介紹了mybatis if else if 條件判斷SQL片段表達(dá)式取值和拼接,文章通過(guò)自己真實(shí)使用的例子給大家詳細(xì)介紹,需要的朋友可以參考下
    2021-09-09
  • Java面向?qū)ο缶幊讨惖睦^承詳解

    Java面向?qū)ο缶幊讨惖睦^承詳解

    這篇文章主要介紹了Java面向?qū)ο缶幊讨惖睦^承,結(jié)合實(shí)例形式較為詳細(xì)的分析了Java面向?qū)ο缶幊填惖母拍?、功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-02-02
  • 最新評(píng)論