Java基礎 Day17

一、遞歸

方法直接或者間接調用本身

將大問題, 層層轉化為一個與原問題相似的、規模更小的問題來解決

二、異常

程序在編譯或執行過程中,出現的非正常的情況 (錯誤)

語法錯誤不是異常

1、閱讀異常信息

從下往上看:發生異常的位置、異常名稱、發生異常的原因

Java 中的所有異常都是類

2、異常的體系結構

(1)Error

嚴重級別問題

常見的 : 棧內存溢出 (StackOverflowError) ?堆內存溢出 (OutOfMemoryError)

(2)Exception:

RuntimeException 及其子類:運行時異常

編譯階段沒有錯誤,運行時可能會出現的錯誤,通常是程序員代碼不嚴謹造成的

除RuntimeException 之外所有的異常:編譯時異常

編譯階段就出現的錯誤,主要起到提醒作用

三、異常的處理方式

1、Java 對于異常的默認處理方式:向上拋出

虛擬機會在出現異常的代碼那里自動的創建一個異常對象:例如 ArithmeticException

異常會從方法中出現的點這里拋出給調用者,調用者最終拋出給JVM虛擬機

虛擬機接收到異常對象后,先在控制臺直接輸出異常信息數據

隨后終止 Java 程序的運行

后續代碼沒有機會執行了,因為程序已經被終止了

2、異常處理方式:try...catch...

異常可以被捕獲,執行處理方案,后續的代碼也可以繼續執行

System.out.println("start");
try {int[] a = {1, 2};int[] b = null;System.out.println(b[0]);  // new NullPointerException()System.out.println(a[2]);System.out.println(10 / 0);
} catch (ArithmeticException e) {System.out.println("ArithmeticException");
} catch (NullPointerException e) {  // NullPointerException e = 上面的異常對象System.out.println("NullPointerException");
} catch (ArrayIndexOutOfBoundsException e) {System.out.println("ArrayIndexOutOfBoundsException");
} catch (Exception e) {System.out.println("Exception");
}
System.out.println("end");輸出:
start
NullPointerException
end

Tips:如果使用多個catch, 最大的異常需要放在最后

3、throws 拋出異常

(1)throws:用在方法上,作用是聲明,聲明這個方法中有可能會出現異常

格式:public void method() throws 異常1,異常2,異常3... { }

(2)throw : 用在方法中, 后面跟的是異常對象, 其作用是拋出異常對象

拋出的異常對象如果是編譯時異常, ?必須使用 throws 聲明

如果是運行時異常, 則不需要寫 throws

public void setAge(int age) throws Exception {if (age >= 0 && age <= 120) {this.age = age;} else {throw new Exception("年齡錯誤,應在0-120歲之間");  // 拋出編譯時異常}
}

4、兩種方式的選擇

看這個異常是否需要暴露出來

需要:拋出

不需要:try…catch

四、自定義異常

Java無法為這個世界上全部的問題提供異常類

如果企業想通過異常的方式來管理自己的某個業務問題,就需要自定義異常

1、自定義編譯時異常

定義一個異常類繼承Exception,重寫構造器

2、自定義運行時異常

定義一個異常類繼承RuntimeException,重寫構造器

public class AgeException extends RuntimeException {public AgeException() {}public AgeException(String message) {super(message);}
}// --------public void setAge(int age) {if (age >= 0 && age <= 120) {this.age = age;} else {throw new AgeException("年齡錯誤,應在0-120歲之間");}
}

五、異常的細節

1、Throwable的常用方法

public?String?getMessage()

獲取異常的錯誤原因

public?void?printStackTrace()

展示完整的異常錯誤信息

2、子類重寫父類方法時,不能拋出父類沒有的異常,或者比父類更大的異常

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81805.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81805.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81805.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hook原理和篡改猴編寫hook腳本

hook原理&#xff1a; hook是常用于js反編譯的技術&#xff1b;翻譯就是鉤子&#xff0c;他的原理就是劫持js的函數然后進行篡改 一段簡單的js代碼 &#xff1a;這個代碼是順序執行的 function test01(){console.log(test01)test02() } function test02(){console.log(02)tes…

使用 Vue 展示 Markdown 文本

使用 Vue 展示 Markdown 文本可以通過以下幾種方法&#xff1a; 方法 1&#xff1a;使用 v-html 指令 可以使用 v-html 指令來渲染 Markdown 文本&#xff1a; <template><div v-html"markdownText"></div> </template> <script>e…

深度解析 Java 中介者模式:重構復雜交互場景的優雅方案

一、中介者模式的核心思想與設計哲學 在軟件開發的歷史長河中&#xff0c;對象間的交互管理一直是架構設計的核心難題。當多個對象形成復雜的網狀交互時&#xff0c;系統會陷入 "牽一發而動全身" 的困境。中介者模式&#xff08;Mediator Pattern&#xff09;作為行…

FreeCAD傻瓜教程-外螺紋的繪制,利用兩個實體進行布爾運算來實現

起因&#xff1a;因為要設計一個波珠螺絲固定器&#xff0c;為了不跑偏&#xff0c;需要在螺柱上加工一個直徑6mm&#xff0c;深度1.2mm的圓弧凹槽所以想用泉州制造的6.8車銑加工。 但是該加工目前不支持軸向的鉆孔&#xff0c;所以想著干脆在兩端加上M8的螺栓&#xff0c;也起…

權限控制相關實現

Spring Boot-Shiro-Vue&#xff1a; 這個項目可以滿足基本的權限控制需求&#xff0c;前后端都有&#xff0c;開箱即用

Node.js路徑處理指南:如何安全獲取當前腳本目錄路徑

本文適用于 Node.js 14.x及以上版本&#xff0c;同時覆蓋 CommonJS 和 ES Modules 模塊系統 文章目錄 一、為什么需要關注路徑問題&#xff1f;二、三種核心方法詳解方法1&#xff1a;經典方案 __dirname (CommonJS)方法2&#xff1a;ES Modules 解決方案方法3&#xff1a;動態…

web基礎

域名概述 2-1 域名的概念&#xff1a;IP 地址不易記憶&#xff0c;域名是互聯網絡上識別和定位計算機的層次結構式的字符標識&#xff0c;與該計算機的互聯網協議 (IP) 地址相對應&#xff0c;用于在數據傳輸時標識計算機的電子方位&#xff0c;方便人們記憶和輸入。 早期使用…

醫療行業數據共享新實踐:如何用QuickAPI打通診療全流程數據壁壘

在醫療行業&#xff0c;數據的高效流轉直接影響診療效率和患者體驗。某三甲醫院在數字化轉型中發現&#xff0c;雖然已積累大量核心業務數據&#xff0c;但各科室系統間的數據互通仍存在明顯瓶頸——檢驗科的報告無法實時同步至門診系統&#xff0c;藥房庫存數據與采購系統脫節…

高級認知型Agent

目標: 構建一個具備自主規劃、多步推理、工具使用、自我反思和環境交互能力的智能代理,使其能夠高效、可靠地完成復雜任務。 核心理念: Agent的智能涌現于一個精密的認知循環: 感知 (Perceive) -> 理解與規劃 (Think/Plan - 想) -> 信息獲取 (Search/Act - 查) -&g…

百度地圖的地鐵圖API所有城市的城市名和citycode的對照關系列表

百度地圖的地鐵圖API所有城市的城市名和citycode的對照關系列表 城市keywordcitycode北京beijing131上海shanghai289廣州guangzhou257深圳shenzhen340重慶chongqing132天津tianjin332石家莊shijiazhuang150南京nanjing315成都chengdu75沈陽shenyang58杭州hangzhou179武漢wuhan2…

SymPy | 獲取表達式自由變量方法與因式分解

SymPy 是 Python 中強大的符號計算庫&#xff0c;廣泛應用于數學建模、公式推導和科學計算。本文將從兩個核心功能展開&#xff1a;表達式中自由變量的獲取與因式分解的實現&#xff0c;通過完整代碼示例和深入分析&#xff0c;幫助讀者掌握其使用方法。 第一部分&#xff1a;獲…

掩膜合并代碼

def ensure_dir(path):"""若目錄不存在則創建"""if not os.path.exists(path): #判斷路徑是否存在os.makedirs(path) #創建路徑def read_and_resize(img_path, size):"""讀取并縮放圖像到指定尺寸&#xff0c;返回 numpy 數組&qu…

藍橋杯5130 健身

問題描述 小藍要去健身&#xff0c;他可以在接下來的 1~n 天中選擇一些日子去健身。 他有 m 個健身計劃&#xff0c;對于第 i 個健身計劃&#xff0c;需要連續的 天&#xff0c;如果成功完成&#xff0c;可以獲得健身增益 si? &#xff0c;如果中斷&#xff0c;得不到任何…

auto關鍵字解析

前言 在11標準之前&#xff0c;auto在c中是聲明存儲器類型的關鍵字。而在11標準中它的功能變為了類型推導。 對此&#xff0c; 在這里引入Cprimer中的原句&#xff1a; 編程時常常需要把表達式的值賦給變量&#xff0c;這就要求在聲明變量的時候清楚的知道表達式的類型。然而…

嵌入式STM32學習——串口USART 2.0(printf重定義及串口發送)

printf重定義&#xff1a; C語言里面的printf函數默認輸出設備是顯示器&#xff0c;如果要實現printf函數輸出正在串口或者LCD顯示屏上&#xff0c;必須要重定義標準庫函數里調用的與輸出設備相關的函數&#xff0c;比如printf輸出到串口&#xff0c;需要將fputc里面的輸出指向…

信號量機制:操作系統中的同步與互斥利器

在計算機操作系統中&#xff0c;信號量機制是一種重要的進程同步與互斥工具。它廣泛應用于多進程或多線程環境中&#xff0c;用于解決并發訪問共享資源時可能出現的競態條件問題。本文將從信號量的基本概念出發&#xff0c;逐步深入探討其工作原理、實現方式以及實際應用&#…

LeetCode 1004. 最大連續1的個數 III

LeetCode 1004題 “最大連續1的個數 III” 是一道關于數組和滑動窗口的問題。題目描述如下&#xff1a; 題目描述 給定一個由若干 0 和 1 組成的數組 nums&#xff0c;以及一個整數 k。你可以將最多 k 個 0 翻轉為 1。返回經過翻轉操作后&#xff0c;數組中連續 1 的最大個數…

digitalworld.local: FALL靶場

digitalworld.local: FALL 來自 <digitalworld.local: FALL ~ VulnHub> 1&#xff0c;將兩臺虛擬機網絡連接都改為NAT模式 2&#xff0c;攻擊機上做namp局域網掃描發現靶機 nmap -sn 192.168.23.0/24 那么攻擊機IP為192.168.23.182&#xff0c;靶場IP192.168.23.4 3&…

經典Java面試題的答案——Java 基礎

大家好&#xff0c;我是九神。這是互聯網技術崗的分享專題&#xff0c;廢話少說&#xff0c;進入正題&#xff1a; 1.JDK 和 JRE 有什么區別&#xff1f; JDK&#xff1a;Java Development Kit 的簡稱&#xff0c;java 開發工具包&#xff0c;提供了 java 的開發環境和運行環境…

LabVIEW風機狀態實時監測

在當今電子設備高度集成化的時代&#xff0c;設備散熱成為關鍵問題。許多大型設備機箱常采用多個風機協同散熱&#xff0c;確保系統穩定運行。一旦風機出現故障&#xff0c;若不能及時察覺&#xff0c;可能導致設備損壞&#xff0c;造成巨大損失。為滿足對機箱內風機狀態實時監…