<address id="v7711"></address><p id="v7711"><pre id="v7711"></pre></p>
<p id="v7711"><ruby id="v7711"></ruby></p>
<pre id="v7711"><ruby id="v7711"></ruby></pre>

      <track id="v7711"></track>

          <pre id="v7711"></pre>

              <pre id="v7711"><ruby id="v7711"></ruby></pre>

              • 自動秒收錄
              • 軟件:1973
              • 資訊:59036|
              • 收錄網站:281935|

              IT精英團

              教你一招,怎么看Java異常

              教你一招,怎么看Java異常

              瀏覽次數:
              評論次數:
              編輯: 小美
              信息來源: 51CTO博客
              更新日期: 2022-10-13 17:06:46
              摘要

              【Java】一篇文章教你學會異常!,異常在Java語言中,將程序執行中發生的不正常情況稱為“異?!?。(開發過程中的語法錯誤和邏輯錯誤不是異常)異常的體系結構Java程序在執行過程中所發生的異常事件可分為兩類:Error:Java虛擬機無法解決的嚴重問題。如:JVM系統內部錯誤、資源耗盡等嚴重情況。

              • 正文開始
              • 相關閱讀
              • 推薦作品

              異常:在Java語言中,將程序執行中發生的不正常情況稱為“異?!?。 (開發過程中的語法錯誤和邏輯錯誤不是異常)異常的體系結構

              Java程序在執行過程中所發生的異常事件可分為兩類:

              Error: Java虛擬機無法解決的嚴重問題。如:JVM系統內部錯誤、資源耗盡等嚴重情況。比如:StackOverflowError和OOM。一般不編寫針對性的代碼進行處理。

              Exception:其它因編程錯誤或偶然的外在因素導致的一般性問題,可以使用針對性的代碼進行處理。例如: 空指針訪問 試圖讀取不存在的文件 網絡連接中斷 數組角標越界

              編譯時異常(checked)不會生成字節碼文件
                IOException
                  FileNotFoundException
                ClassNotFoundException
                
              運行時異常(unchecked,RuntimeException)
                NullPointerException  //空指針異常
                ArrayIndexOutOfBoundsException  //數組角標越界
                ClassCastException  //類型轉化異常
                NumberFormatException  //編碼格式異常
                InputMismatchException  //輸入不匹配
                ArithmeticException  //算術異常

              image.png

              我們常說的異常指的是Exception,這類異常又可分為編譯時異常(上圖中紅色部分)和運行時異常(上圖中藍色部分)

              編譯時異常: 執行javac.exe命名時,可能出現的異常 是指編譯器不要求強制處置的異常。一般是指編程時的邏輯錯誤,是程序員應該積極避免其出現的異常。java. lang. Runtime Exception類及它的子類都是運行時異常。 對于這類異常,可以不作處理,因為這類異常很普遍,若全處理可能會對程序的可讀性和運行效率產生影響

              運行時異常: 執行java.exe命名時,出現的異常 是指編譯器要求必須處置的異常。即程序在運行時由于外界因素造成的一般性異常。

              常見的異常類型

              //以下是編譯時異常
                @Test
                public void test7(){
                  File file = new File("hello.txt");
                  FileInputStream fis = new FileInputStream(file);
                
                 int data = fis.read();
                  while(data != -1){
                    System.out.print((char)data);
                    data = fis.read();
                  }
                  
                  fis.close();
                  
                }
              
              
              //以下是運行時異常
                //ArithmeticException
                @Test
                public void test6(){
                  int a = 10;
                  int b = 0;
                  System.out.println(a / b);
                }
                
                //InputMismatchException
                @Test
                public void test5(){
                  Scanner scanner = new Scanner(System.in);
                  int score = scanner.nextInt();
                  System.out.println(score);
                  
                  scanner.close();
                }
                
                //NumberFormatException
                @Test
                public void test4(){
                  
                  String str = "123";
                  str = "abc";
                  int num = Integer.parseInt(str);  
                }
                
                //ClassCastException
                @Test
                public void test3(){
                  Object obj = new Date();
                  String str = (String)obj;
                }
                
                //IndexOutOfBoundsException
                @Test
                public void test2(){
                  //ArrayIndexOutOfBoundsException
                  int[] arr = new int[10];
                  System.out.println(arr[10]);
                  //StringIndexOutOfBoundsException
                  String str = "abc";
                  System.out.println(str.charAt(3));
                }
                
                //NullPointerException
                @Test
                public void test1(){    
                  int[] arr = null;
                  System.out.println(arr[3]);
                  
                  String str = "abc";
                  str = null;
                  System.out.println(str.charAt(0));
                  
                }

              異常處理

              java異常處理的抓拋模型

              拋":程序在正常執行的過程中,一旦出現異常,就會在異常代碼處生成一個對應異常類的對象。并將此對象拋出。拋出后,其后的代碼就不再執行。

              "抓"(異常的處理方式):

              1.try-catch-finally

              2.throws

              異常處理方式一:try-catch-finally

              格式:

              try{
                  //可能出現異常的代碼
                  
              }catch(異常類型1 變量名1){
                    //處理異常的方式1
              }catch(異常類型2 變量名2){
                  //處理異常的方式2
              }
               ...
              finally{
                    //一定會執行的代碼
              }

              說明:

              1. finally是可選的(可以寫也可以不寫)

              2. finally中聲明的是一定會被執行的代碼。即使catch中又出現異?;蛘遲ry中return語句又或者catch中return語句等情況;

              3. 像數據庫連接、輸入輸出流、網絡編程Socket等資源,JVM是不能自動的回收的,我們需要自己手動的進行資源的釋放。此時的資源釋放,就需要聲明在finally中;

              4. 使用try將可能出現異常代碼包裝起來,在執行過程中,一旦出現異常,就會生成一個對應異常類的對象,根據此對象的類型,去catch中進行匹配,一旦try中的異常對象匹配到某一個catch時,就進入catch中進行異常的處理。一旦處理完成,就跳出當前的try-catch結構(在沒寫finally的情況。繼續執行其后的代碼);

              5. catch中的異常類型如果沒子父類關系,則誰聲明在上,誰聲明在下無所謂;如果滿足子父類關系,則要求子類一定聲明在父類的上面;

              6. 常用的異常對象處理的方式: 1.  String getMessage() 2. printStackTrace()

              7. 在try結構中聲明的變量,再出了try結構以后,就不能再被調用;

              8. try-catch-finally結構可以嵌套;

              注意:

              1. 在try結構中聲明的變量,再出了try結構以后,就不能再被調用;

              2. 使用try-catch-finally處理編譯時異??梢岳斫鉃閷⒕幾g中的異常放到運行中。我們通常就不針對運行時異常編寫try-catch-finally了。

              針對于編譯時異常,一定要考慮異常的處理;

              異常處理方式二:throws"throws + 異常類型"寫在方法的聲明處 當方法體執行時,出現異常,就會被拋出。異常代碼后續的代碼,就不再執行;

              兩種處理方法的區別try-catch-finally:真正的將異常給處理掉了; throws的方式只是將異常拋給了方法的調用者,并沒真正將異常處理掉;
              兩種處理方式怎么選擇?
              1. 執行的方法a中,先后又調用了另外的幾個方法,這幾個方法是遞進關系執行的。我們建議這幾個方法使用throws的方式進行處理。而執行的方法a可以考慮使用try-catch-finally方式進行處理;

              2. 如果父類中被重寫的方法沒throws方式處理異常,則子類重寫的方法也不能使用throws,意味著如果子類重寫的方法中異常,必須使用try-catch-finally方式處理;

              注意:子類重寫的方法拋出的異常類型不大于父類被重寫的方法拋出的異常類型

              手動拋出異常對象

              在程序執行中,除了自動拋出異常對象的情況之外,我們還可以手動的throw一個異常類的對象。

              throw 和 throws區別: throw 表示拋出一個異常類的對象,生成異常對象的過程。聲明在方法體內。 throws 屬于異常處理的一種方式,聲明在方法的聲明處。

              代碼示例

              class Student{
                
                private int id;
                
                public void regist(int id) throws Exception {
                  if(id > 0){
                    this.id = id;
                  }else{
                    //手動拋出異常對象
              //      throw new RuntimeException("您輸入的數據非法!");
              //      throw new Exception("您輸入的數據非法!");
                    throw new MyException("不能輸入負數");
              
                  }   
                }
              
                @Override
                public String toString() {
                  return "Student [id=" + id + "]";
                }
                  
              }

              自定義異常類

              繼承于現的異常結構:RuntimeException 、Exception 提供全局常量:serialVersionUID(對類的唯一標識) 提供重載的構造器

              public class MyException extends Exception{
                
                static final long serialVersionUID = -7034897193246939L;
                
                public MyException(){
                  
                }
                
                public MyException(String msg){
                  super(msg);
                }
              }
              搭建一個藥店小程序,需要的費用有哪些
              ? 上一篇 2022-10-12
              函數days,年、月、日主函數
              下一篇 ? 2022-10-13
              • 函數days,年、月、日主函數
                0閱讀 0條評論 個贊
                寫一個函數days,實現第1 題的計算。由主函數將年、月、日傳遞給days函數,計算后將日子數傳回主函數輸出?!?/div>
              • 這才是源碼安裝PHP擴展的正確打開方式
                0閱讀 0條評論 個贊
                源碼安裝PHP擴展的兩種方式,Pear:php代碼層面的擴展,PEAR的所有擴展都是用純粹的PHP代碼編寫的,用戶在下載到PEAR擴展以后可以直接使用將擴展的代碼包含到自己的PHP文件中使用PECL:底層擴展而PECL是使用C語言開發的,通常用于補充一些用PHP難以完成的底層功能,往往需要重新編譯或者在配置文件中設置后才能在用戶自己的代碼中使用PECL使建立共享PHP擴展庫更容易?!?/div>
              • 來圍觀:GoogLeNet中的inception結構的區別
                2閱讀 0條評論 個贊
                【模型解讀】GoogLeNet中的inception結構,你看懂了嗎這是深度學習模型解讀第3篇,本篇我們將介紹GoogLeNetv1到v3。作者&編輯|言有三01InceptionV1【1】GoogLeNet首次出現在2014年ILSVRC比賽中獲得冠軍?!?/div>
              • 原來使用這幾個方案,也能輕松解決laravel庫存
                1閱讀 0條評論 個贊
                &gt;input('id');$product=Product::where('id',$id)-&gt;firstOrFail……
              • 接口中還可以定義變量,漲知識!
                1閱讀 0條評論 個贊
                &nbsp;&nbsp;&nbsp;&nbsp;因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為?!?/div>
              發表評論 共有條評論
              用戶名: 密碼:
              驗證碼: 匿名發表
              • 原來使用這幾個方案,也能輕松解決laravel庫存
                1閱讀 0條評論 個贊
                &gt;input('id');$product=Product::where('id',$id)-&gt;firstOrFail……
              • 2022年報告分享“生物醫藥人才,需求與發展環境報告”
                1閱讀 0條評論 個贊
                當前環境與政策布局共同將生物醫藥行業送上風口,由發布的《生物醫藥 / 醫療人才需求與發展環境報告》,將生物工程、醫療設備 / 器械、醫藥制造、醫療檢測、醫藥批發 / 零售、衛生服務作為研究范圍,從行業人才供需、薪酬、工作環境以及職場人工作體驗等方面,反映生物醫藥 / 醫療產業招聘求職情況,為人才擇業、轉行帶來啟示,同時為企業招聘和行業研究提供參考?!?/div>
              • Lua腳本在Redis交易中的應用實踐
                8閱讀 0條評論 個贊
                使用過Redis事務的應該清楚,Redis事務實現是通過打包多條命令,單獨的隔離操作,事務中的所有命令都會按順序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。事務中的命令要么全部……
              • TwoSum兩數,C++實現
                1閱讀 0條評論 個贊
                [LeetCode] Two Sum 兩數之和 java實現 C++實現,[LeetCode]TwoSum兩數之和java實現C+Givenanarrayofintegers,return&nbsp;indices&nbsp;ofthetwonumberssuchthattheyadduptoaspecifictarget.Youmayassumethateachinputwouldhave&nbsp……
              • 零基礎入門Java編程,想學?來看
                2閱讀 0條評論 個贊
                零基礎如何學習入門Java編程,如何學習在以前大部分人學習都是先去找本書,先看看,再試,要是不懂了在去網上去查,再在繼續啃著書本。但現在向書學習和在網上學習這掌握的效果是不同的,要學會用適合自己的學習方式。目前的學習要是能看進去書本,還是最好看看書的學習學習提升提升理論知識。而現在的網絡上有各種視頻學習教程,有的視頻還是經過考驗的,尤其是目前大機構放出來的課程,或者是學習路線完整有一套可行的學習路線得?!?/div>
              • 如何獲取Yarn和Spark UI的界面索引信息
                1閱讀 0條評論 個贊
                .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
              • 在便攜終端上實時檢測不是難題,Pad-YoloV5
                0閱讀 0條評論 個贊
                在便攜終端上實時檢測不再是難題,計算機視覺研究院專欄作者:Edison_G目標檢測是現在最熱門的研究課題,目前最流行的還是Yolo系列框架,最近我們計算機視覺研究院也分享了很對目標檢測干活及實踐,都是Yolo-Base框架,今天我們分享一個經過修改后的Yolov5,在IPad上實時檢測!……
              • Day03-Algorithm
                2閱讀 0條評論 個贊
                Algorithm-Day03,前言如果想成為別人口中的大佬,那就無時無刻的卷,追隨著大佬的步伐......二分法用法有序數組中找到Num//返回找到數值的索引,沒找到返回-1publicstaticintFindValue(int[]arr,intvalue){//數組為空則返回-1if(arr==null||arr.length==0){return-1;……
              • Spring框架主要模塊IOC詳解
                0閱讀 0條評論 個贊
                Spring框架主要模塊IOC詳解,1、什么是Spring框架?Spring框架有哪些主要模塊?Spring框架是一個為Java應用程序的開發提供了綜合、廣泛的基礎性支持的Java平臺。Spring幫助開發者解決了開發中基礎性的問題,使得開發人員可以專注于應用程序的開發。Spring框架本身亦是按照設計模式精心打造,這使得我們可以在開發環境中安心的集成Spring框架,不必擔心Spring是如何在后臺進行工作的。Spring框架至今……
              • 知識抽取應該怎么做?
                0閱讀 0條評論 個贊
                互聯網時代,人類在與自然和社會的交互中生產了異常龐大的數據,這些數據中包含了大量描述自然界和人類社會客觀規律有用信息。如何將這些信息有效組織起來,進行結構化的存儲,就是知識圖譜的內容?!?/div>
              • 卡夫卡數據丟失問題優化總結及重復消費原因分析(一)
                0閱讀 0條評論 個贊
                .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
              • 從0構建SQL Server AlwaysOn第3章(配置AlwaysOn)
                0閱讀 0條評論 個贊
                第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnblogs.com/lyhabc/p/4682028.html第三篇htt……
              • 三.七 IP地址,ARP協議,MAC
                8閱讀 0條評論 個贊
                IP地址是因特網上的主機和路由器所使用的地址,用于標識兩部分信息。ARP協議屬于TCP/IP的網際層,其作用是已知設備所分配到的IP地址,使用ARP協議可以通過該IP地址獲取設備的MAC地址?!?/div>
              • 談不可靠的數據庫安全掃描
                0閱讀 0條評論 個贊
                前陣子就有朋友留言說讓我吐槽吐槽數據庫安全掃描,此言正合我意。這些年,企業安全事故頻發,勒索病毒事故多出,再加上安全對抗演練的進行,讓數據庫安全在企業里的地位與日俱增,安全掃描也變成了頭等大事。也經?!?/div>
              • 深入了解美團葉子發射器開源方案
                0閱讀 0條評論 個贊
                大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
              • 構建塊-?Thread專題(4)
                0閱讀 0條評論 個贊
                Thread專題(4) -?構建塊,在實踐中,委托是創建線程安全類最有效的策略之一:用已有的線程安全類來管理所有狀態即可?!?/div>
              • i.MX8MQ自制背板無PCIe問題詳解
                9閱讀 0條評論 個贊
                在飛凌嵌入式OKMX8MQ-C開發板上有兩個PCIe接口,對應著兩個PCIe差分時鐘,兩路PCIe分別用作了M.2接口卡槽KEYE(P37)和KEYM(P34)。很多使用FETMX8MQ-C核心板的用……
              • C' Chain Chain '念念不忘@有回音的雙向鏈表
                0閱讀 0條評論 個贊
                1.前言寫過一篇與單鏈表相關的博文(https://blog.51cto.com/gkcode/5681771),實際應用中,雙向循環鏈表的功能更強大。單鏈表中,查詢一個已知結點的后驅結點的時間復雜……
              • MySQL DDL執行模式-在線DDL簡介
                3閱讀 0條評論 個贊
                MySQLDDL執行方式-OnlineDDL介紹1引言大家好,今天與大家一起分享一下mysqlDDL執行方式。一般來說MySQL分為DDL(定義)和DML(操作)。DDL:DataDefi……
              • JAVA中容器設計的進化史:從白盒到黑盒 再到作為設計模式之一的迭代器
                0閱讀 0條評論 個贊
                大家好,又見面了。在我們的項目編碼中,不可避免的會用到一些容器類,我們可以直接使用List、Map、Set、Array等類型。當然,為了體現業務層面的含義,我們也會根據實際需要自行封裝一些專門的Bea……
              最近發布資訊
              更多
              亚洲AV色福利天堂网妓女
              <address id="v7711"></address><p id="v7711"><pre id="v7711"></pre></p>
              <p id="v7711"><ruby id="v7711"></ruby></p>
              <pre id="v7711"><ruby id="v7711"></ruby></pre>

                  <track id="v7711"></track>

                      <pre id="v7711"></pre>

                          <pre id="v7711"><ruby id="v7711"></ruby></pre>