異常練習及面試題——博客園:執、著

来源:http://www.cnblogs.com/xiaoshimei/archive/2016/12/27/6226521.html
-Advertisement-
Play Games

已知:public class ExceptionText{ public static void main(String[] args){ try{ int i=1; System.out.println(i++); }finally{ System.out.println(++i); } } } ...


已知:public class ExceptionText{

  public static void main(String[] args){

    try{

      int i=1;

      System.out.println(i++);

    }finally{

      System.out.println(++i);

    }

  }

}

程式編譯並運行的結果為( C)

A.1 2           B.1 1           C.編譯錯誤            D.1

解析:變數i只在try語句塊內定義,所以其有效範圍僅限於try語句塊,finally語句塊不能訪問i,所以編譯錯誤

已知:public class ExceptionDemo{

  public static void main(String[] args){

    try{

      System.out.println("i="+(i++));

      int m=10/0;

    }catch(ArithmeticException e){

      throw new ArithmeticException("算術異常");

      e.printStackTrace();

    }finally{

      System.out.println("i="+(++i));

    }

  }

}

程式編譯並運行的結果為( D)

A. 0 2

B. i=1

java.lang.ArithmeticException:/by zero

     at ExceptionDemo.main(ExceptionDemo.java.7)

  i=2

Exception in thread"main" java.lang.ArithmeticException:

     at ExceptionDemo.main(ExceptionDemo.java.12)

C.

i=0

java.lang.ArithmeticException:/by zero

     at ExceptionDemo.main(ExceptionDemo.java.7)

  i=2

Exception in thread"main" java.lang.ArithmeticException:算術異常

     at ExceptionDemo.main(ExceptionDemo.java.12)

D.編譯錯誤,因為無法訪問e.printStackTrace();

解析:throw語句後面不能緊跟其他語句,因為這些語句都沒有被執行的機會

已知:

public class T3 {
  public static void main(String[] args) {
    int i=0;
    try {
      System.out.println("i="+(i++));
      int m=10/0;
    } catch (ArithmeticException e) {
      System.exit(0);
      e.printStackTrace();
    }finally{
      System.out.println("i="+(++i));
    }
  }
}

程式編譯並運行的結果為(B)

A. i=0 i=2      

B.i=0          

C.i=0   

java.lang.ArithmeticException:/by zero

     at ExceptionDemo.main(T3.java.7)

D.編譯錯誤

解析:在finally語句塊之前執行了System.exit(0)退出運行,則finally語句塊將不會被執行

已知:

public class T3 {
  public static void main(String[] args) {
    int n=fun(2);
    System.out.println(n);
  }
  public static int fun(int i){
    try{
      int m=i/0;
      return i++;
    }catch(ArithmeticException e){
      return (i+3);
    }finally{
      return (i+8);
    }
  }
}

程式編譯並運行的結果為(C)

A.2            B.5            C.10               D.編譯錯誤

解析:在執行try或catch語句塊中的return語句時,假如有finally語句塊,會先執行finally語句塊。所以上面程式中先執行的是finally語句塊中的return語句,返回10並退出方法

public class T3 {
  public static void main(String[] args) {
    int n=fun(2);
    System.out.println(n);
  }
  public static int fun(int i){
    try{
      return i++;
    }finally{
      return i+8;
    }
  }
}

該代碼的運行結果為11

public class T3 {
  public static void main(String[] args) {
    int n=fun(2);
    System.out.println(n);
  }
  public static int fun(int i){
    try{
      return i++;
    }finally{
      i=i+8;
    }
  }
}

該代碼的運行結果為2

public class T3 {
  public static String output="";
    public static void foo(int i){
    try{
      if(i==1)
        throw new Exception();
      output+="1";
    }catch(Exception e){
      output+="2";
      return;
    }finally{
      output+=3;
    }
    output+=4;
  }  
  public static void main(String[] args) {
    foo(0);
    System.out.println(output);
    foo(1);
    System.out.println(output);
  }
}

改程式運行結果:

134

13423

(方法覆蓋)有如下代碼

class Super {

  public void method() throws IOException {

  }

}

public class MySub extends Super {

  @Override

  public void method()//_1_______________________ {

  }

}

問:

在//1 處,填入以下________________________代碼編譯無法通過(C)

 A.throws java.io.IOException

B.throws java.io.FileNotFoundException, java.io.EOFException

C.throws java.sql.SQLException

D.不拋出任何異常,即什麼都不填寫

與C、C++等語言相比,Java的異常處理機制有何優點?

答:1. 將錯誤代碼從常規代碼中分離出來,提高了程式的可讀性,簡化了程式的結構;2.允許對錯誤進行修正,可以對錯誤類型和錯誤差別進行分組,錯誤的處理變得規範;3.調用棧向上傳送錯誤,方便定義錯誤和維護;4.可以使用catch語句輸出錯誤信息;5.防止程式自動中斷程式(try-catch)

error和exception有什麼區別? 

Error表示系統級的錯誤和程式不必處理的異常,是java運行環境中的內部錯誤或者硬體問題。比如:記憶體資源不足等。對於這種錯誤,程式基本無能為力,除了退出運行外別無選擇,它是由Java虛擬機拋出的。

Exception表示需要捕捉或者需要程式進行處理的異常,它處理的是因為程式設計的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程式必須處理的。

常見異常

ArithmeticException算術異常、ArrayIndexOutOfBoundsExceptin數組越界異常、ClassCastException對象轉換異常、NullPointerException空指向異常、ArrayStoreException數組存儲異常


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • java學習這一部分其實也算是今天的重點,這一部分用來回答很多群里的朋友所問過的問題,那就是我你是如何學習Java的,能不能給點建議?今天我是打算來點乾貨,因此咱們就不說一些學習方法和技巧了,直接來談每個階段要學習的內容甚至是一些書籍。這一部分的內容,同樣適用於一些希望轉行到Java的同學。 在大家 ...
  • 題目大意: 花花山峰巒起伏,峰頂常年被雪,Memphis打算幫花花山風景區的人員開發一個滑雪項目。 我們可以把風景區看作一個n*n的地圖,每個點有它的初始高度,滑雪只能從高處往低處滑【嚴格大於】。但是由於地勢經常變動【比如雪崩、滑坡】,高度經常變化;同時,政府政策規定對於每個區域都要間歇地進行保護, ...
  • //應用於EasyUI框架 js://圖片上傳 loadPic:function(index){ $('#hrAddTabs').datagrid('selectRow',index); var row = $("#hrAddTabs").datagrid("getSelected"); var c ...
  • 你是不是在為想收集數據而不知道如何收集而著急? 你是不是在為想學習爬蟲而找不到一個專門為小白寫的教程而煩惱? Bingo! 你沒有看錯,這就是專門面向小白學習爬蟲而寫的!我會採用實例的方式,把每個部分都跟實際的例子結合起來幫助小伙伴兒們理解。最後再寫幾個實戰的例子。 我們使用Python來寫爬蟲,一 ...
  • FunDA的特點之一是以數據流方式提供逐行數據操作支持。這項功能解決了FRM如Slick數據操作以SQL批次模式為主所產生的問題。為了實現安全高效的數據行操作,我們必須把FRM產生的Query結果集轉變成一種強類型的結果集,也就是可以欄位名稱進行操作的數據行類型結果集。在前面的一篇討論中我們介紹了通 ...
  • 一個已有的Struts+Spring+Hibernate項目,以前使用MySQL資料庫,現在想把Redis也整合進去。 1. 相關Jar文件 下載並導入以下3個Jar文件: commons-pool2-2.4.2.jar、jedis-2.3.1.jar、spring-data-redis-1.3.4 ...
  • 總的來說,要使在thinkphp框架下麵HTML導入的圖片、css文件和js文件有效,只有兩種方法:(1)使用絕對路徑;(2)在項目目錄下創建新目錄Public,把所有的img文件夾、js文件夾和css文件夾放在裡面,同時把原有的HTML中的導入路徑前面統一加上“lxx_public/子目錄/”,比 ...
  • Annotations ___ They provide information that you need to fully describe your program, but that cannot be expressed in Java. In general the kind of an ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...