W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
以下代碼顯示了如何獲取線程的堆棧幀。
Throwable對(duì)象在創(chuàng)建線程的點(diǎn)處捕獲線程的堆棧。
public class Main { public static void main(String[] args) { m1(); } public static void m1() { m2(); } public static void m2() { m3(); } public static void m3() { Throwable t = new Throwable(); StackTraceElement[] frames = t.getStackTrace(); printStackDetails(frames); } public static void printStackDetails(StackTraceElement[] frames) { System.out.println("Frame count: " + frames.length); for (int i = 0; i < frames.length; i++) { int frameIndex = i; // i = 0 means top frame System.out.println("Frame Index: " + frameIndex); System.out.println("File Name: " + frames[i].getFileName()); System.out.println("Class Name: " + frames[i].getClassName()); System.out.println("Method Name: " + frames[i].getMethodName()); System.out.println("Line Number: " + frames[i].getLineNumber()); } } }
上面的代碼生成以下結(jié)果。
Java 7添加了一個(gè)名為try-with-resources的新結(jié)構(gòu)。
使用Java 7中的新的try-with-resources構(gòu)造,上面的代碼可以寫成
try (AnyResource aRes = create the resource...) { // Work with the resource here. // The resource will be closed automatically. }
當(dāng)程序退出構(gòu)造時(shí),try-with-resources構(gòu)造自動(dòng)關(guān)閉資源。
資源嘗試構(gòu)造可以具有一個(gè)或多個(gè)catch塊和/或finally塊。
我們可以在try-with-resources塊中指定多個(gè)資源。兩個(gè)資源必須用分號(hào)分隔。
最后一個(gè)資源不能后跟分號(hào)。
以下代碼顯示了try-with-resources使用一個(gè)和多個(gè)資源的一些用法:
try (AnyResource aRes1 = getResource1()) { // Use aRes1 here } try (AnyResource aRes1 = getResource1(); AnyResource aRes2 = getResource2()) { // Use aRes1 and aRes2 here }
我們?cè)趖ry-with-resources中指定的資源是隱式最終的。
在try-with-resources中的資源必須是java.lang.AutoCloseable類型。
Java 7添加了AutoCloseable接口,它有一個(gè)close()方法。
當(dāng)程序退出try-with-resources塊時(shí),將自動(dòng)調(diào)用所有資源的close()方法。
在多個(gè)資源的情況下,按照指定資源的相反順序調(diào)用close()方法。
class MyResource implements AutoCloseable { public MyResource() { System.out.println("Creating MyResource."); } @Override public void close() { System.out.println("Closing MyResource..."); } } public class Main { public static void main(String[] args) { try (MyResource mr = new MyResource(); MyResource mr2 = new MyResource()) { } } }
上面的代碼生成以下結(jié)果。
Java 7增加了對(duì)多catch塊的支持,以便在catch塊中處理多種類型的異常。
我們可以在multi-catch塊中指定多個(gè)異常類型。多個(gè)異常由豎線(|)分隔。
捕獲三個(gè)異常:Exception1,Exception2和Exception3。
try { // May throw Exception1, Exception2, or Exception3 } catch (Exception1 | Exception2 | Exception3 e) { // Handle Exception1, Exception2, and Exception3 }
在multi-catch塊中,不允許有通過子類化相關(guān)的替代異常。
例如,不允許以下multi-catch塊,因?yàn)镋xception1和Exception2是Throwable的子類:
try { // May throw Exception1, Exception2, or Exception3 } catch (Exception1 | Exception2 | Throwable e) { // Handle Exceptions here }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: