【進階篇-Day8:JAVA中遞歸、異常的介紹】

目錄

  • 1、遞歸的介紹和使用
    • 1.1 遞歸的介紹
    • 1.2 案例
      • `案例一:`
      • `案例二:`
      • `案例三:`
      • `案例四:`
    • 1.3 總結
  • 2、`異常的介紹和使用`
    • 2.1 異常的介紹:
      • (1)能夠看懂異常
      • (2)異常的體系接口和分類
      • (3)總結
    • 2.2 異常的處理方式
      • `(1)異常的默認處理流程`
      • `(2)異常處理方式 try...catch和throw拋出`
      • `(3)總結`
    • 2.3 自定義異常
    • 2.4 練習

1、遞歸的介紹和使用

1.1 遞歸的介紹

在這里插入圖片描述

package com.itheima.recursion;/*** Title: RecurisonDemo1* Describe: 類的功能* Name: masizhou* Date: 2024/7/11* Copyright: @2022 by masizhou*/public class RecurisonDemo1 {/*** 遞歸介紹:方法直接或間接地調用本身*/public static void main(String[] args) {methodA();}public static void methodA(){methodB();}public static void methodB(){methodC();}public static void methodC(){methodA();}
}

上述方法會發生棧內存溢出異常,如下:
在這里插入圖片描述

1.2 案例

案例一:

在這里插入圖片描述

package com.itheima.recursion;public class RecurisonDemo2 {public static void main(String[] args) {/*** 需求:使用遞歸求5的階乘*/int result = jc(5);System.out.println("5的階乘是:" + result);//5的階乘是:120}public static int jc(int num){if (num == 1){return 1;}return jc(num - 1) * num;}
}

棧內存圖分分析:
在這里插入圖片描述

案例二:

在這里插入圖片描述

package com.itheima.recursion;public class RecurisonDemo3 {public static void main(String[] args) {/*** 需求:使用遞歸求1~n之和*/int result = sum(100);System.out.println(result);//5050}public static int sum(int num){if (num == 1){return 1;}return num + sum(num - 1);}
}

案例三:

在這里插入圖片描述

package com.itheima.recursion;public class RecurisonDemo4 {public static void main(String[] args) {/*** 需求:使用遞歸實現斐波那契數列:1 1 2 3 5 8 13 21...*/int result = f(20);System.out.println(result);//6765}public static int f(int num){if (num <= 2){return 1;}return f(num - 1) + f(num - 2);}
}

案例四:

在這里插入圖片描述

package com.itheima.recursion;public class RecursionDemo5 {public static void main(String[] args) {/*** 需求:猴子吃桃 (n / 2) - 1*/int result = eat(1);System.out.println(result);//1534}public static int eat(int day){if (day == 10){return 1;}// 今天的桃子數 = (明天桃子數+1) * 2return 2 * (eat(day + 1) + 1);}
}

1.3 總結

在這里插入圖片描述

2、異常的介紹和使用

2.1 異常的介紹:

在這里插入圖片描述
在這里插入圖片描述

(1)能夠看懂異常

package com.itheima.expection;public class ExceptionDemo1 {/*** 閱讀異常信息:從下往上*          1、找異常錯誤位置*          2、異常名稱*          3、異常原因*/public static void main(String[] args) {mothed();}public static void mothed(){int[] arr = {1, 2, 3};System.out.println(arr[10]);}
}

上述代碼會拋出異常,異常信息如下:
在這里插入圖片描述

在閱讀異常時,遵循從下往上的原則:
- 1、找異常錯誤位置
- 2、異常名稱
- 3、異常原因

注:要是遇到不認識的異常怎么辦呢?
答:所有的異常都是,因此把這個類復制下來,到Java的API文檔去看詳細信息即可。

(2)異常的體系接口和分類

在這里插入圖片描述

package com.itheima.expection;import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.FileHandler;public class ExceptionDemo2 {public static void main(String[] args) throws ParseException, IOException {/*** - 編譯時異常:編譯階段就出現的異常(語法錯誤不算)。需要在運行之前給出解決方案。* - 運行時異常:編譯過了,運行期間【可能會出現的異常】*/SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd");Date parse = simpleDateFormat.parse("2008年12月12日");//編譯異常,需要給出解決方案FileHandler f = new FileHandler("D:\\a.txt");//編譯異常,需要給出解決方案}
}

在這里插入圖片描述
在這里插入圖片描述

(3)總結

在這里插入圖片描述

2.2 異常的處理方式

(1)異常的默認處理流程

在這里插入圖片描述

(2)異常處理方式 try...catch和throw拋出

在這里插入圖片描述

在這里插入圖片描述

package com.itheima.expection.handle;
public class HandleDemo1 {/*** 異常的處理方式:* 1、try...catch捕獲異常*      好處:   異常對象可以被捕獲,后續的代碼可以繼續執行*      格式:*              try{*                  可能會出現異常的代碼*              } catch(異常名稱 對象名){*                  異常的處理方案*              }*      執行流程:*              1、執行try{}中的代碼,看是否有異常對象*              2、沒有:catch就不會捕獲,后續代碼繼續執行*              3、有:catch捕獲異常對象,執行catch{}中的處理方案,后續代碼繼續執行* 2、throw 拋出異常*** ----------------------------------------------------------------------------** 問題:正在面臨的異常,是否需要暴露出來*      - 不需要暴露:try...catch捕獲*      - 需要暴露:拋出異常*/public static void main(String[] args) {//1、try...catch捕獲異常System.out.println("開始");try {System.out.println(10/0);  // new ArithmeticException();}catch (ArithmeticException e){System.out.println("捕獲了運算異常");}System.out.println("結束");}
}

(3)總結

在這里插入圖片描述
在這里插入圖片描述

2.3 自定義異常

在這里插入圖片描述

在這里插入圖片描述

package com.itheima.expection.handle;/*** 自定義運行異常*/public class MyException extends RuntimeException{public MyException() {}public MyException(String message) {super(message);}
}
package com.itheima.expection.handle;import java.util.Scanner;public class HandleDemo2 {/*** 使用自定義異常**/public static void main(String[] args) {try {myFunction();//此方法會拋出自定義的異常} catch (MyException e) {System.out.println(e.getMessage());}}public static void myFunction(){throw new MyException("我的自定義異常");}
}

在這里插入圖片描述

2.4 練習

在這里插入圖片描述

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

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

相關文章

Go語言map并發安全,互斥鎖和讀寫鎖誰更優?

并發編程是 Go 語言的一大特色&#xff0c;合理地使用鎖對于保證數據一致性和提高程序性能至關重要。 在處理并發控制時&#xff0c;sync.Mutex&#xff08;互斥鎖&#xff09;和 sync.RWMutex&#xff08;讀寫鎖&#xff09;是兩個常用的工具。理解它們各自的優劣及擅長的場景…

蘋果入局,AI手機或將實現“真智能”?

【潮汐商業評論/原創】 “AI應用智能手機不就是現在的AI手機。” 當被問到現階段對AI手機的看法時&#xff0c;John如是說。“術業有專攻&#xff0c;那么多APP在做AI功能&#xff0c;下載用就是了&#xff0c;也用不著現在換個AI手機啊。” 對于AI手機&#xff0c;或許大多…

上海市計算機學會競賽平臺2023年1月月賽丙組積木染色(二)

題目描述 &#x1d45b;n 塊積木排成一排&#xff0c;需要給每塊積木染色&#xff0c;顏色有 &#x1d45a;m 種。請問有多少種方法&#xff0c;從第二塊積木開始統計&#xff0c;恰有 &#x1d45d;p 塊積木與前一塊積木顏色不同&#xff1f; 輸入格式 三個整數分別表示 &a…

Windows安裝和使用Doccano標注工具

簡介 開源鏈接&#xff1a;GitHub - doccano/doccano: Open source annotation tool for machine learning practitioners. Open source annotation tool for machine learning practitioners. Doccano是一款開源的文本標注工具&#xff0c;由人工智能公司Hironsan開發并在G…

【算法】代碼隨想錄之數組

文章目錄 前言 一、二分查找法&#xff08;LeetCode--704&#xff09; 二、移除元素&#xff08;LeetCode--27&#xff09; 三、有序數組的平方&#xff08;LeetCode--977&#xff09; 四、長度最小的子數組&#xff08;LeetCode--209&#xff09; 五、螺旋矩陣II&#x…

花幾千上萬學習Java,真沒必要!(二)

1、注釋&#xff1a; java代碼注釋分3種&#xff1a; 單行注釋&#xff1a;//注釋信息 多行注釋: /*注釋信息*/ 文檔注釋:/**注釋信息*/ public class TestComments {// 這是單行注釋&#xff0c;用于注釋單行代碼或解釋代碼功能/* 這是多行注釋&#xff0c;用于注釋多行代碼…

Kotlin runCatching try-catch耗時比較

Kotlin runCatching try-catch耗時比較 fun main(args: Array<String>) {val lists arrayListOf("z")val idx 10/***納秒統計** ns&#xff08;nanosecond&#xff09;&#xff1a;納秒。一秒的10億分之一&#xff0c;10的-9次方秒。*   1納秒0.000001 毫秒…

基于實現Runnable接口的java多線程

Java多線程通常可以通過繼承Thread類或者實現Runnable接口實現。本文主要介紹實現Runnable接口的java多線程的方法, 并通過ThreadPoolTaskExecutor調用執行&#xff0c;以及應用場景。 一、應用場景 異步、并行、子任務、磁盤讀寫、數據庫查詢、網絡請求等耗時操作等。 以下…

筆記:在Entity Framework Core中如何處理多線程操作DbContext

一、目的&#xff1a; 在使用Entity Framework Core (EF Core) 進行多線程操作時&#xff0c;需要特別注意&#xff0c;因為DbContext類并不是線程安全的。這意味著&#xff0c;你不能從多個線程同時使用同一個DbContext實例進行操作。嘗試這樣做可能會導致數據損壞、異常或不可…

C語言排序之快速排序

快速排序是一種高效的排序算法。它采用了分治的策略&#xff0c;通過選擇一個基準元素&#xff0c;將待排序的序列劃分為兩部分&#xff0c;一部分的元素都比基準元素小&#xff0c;另一部分的元素都比基準元素大&#xff0c;然后對這兩部分分別進行快速排序&#xff0c;從而實…

前端開發工具

Lodash 有普通的 CommonJS 版本&#xff08;通常稱為 lodash&#xff09;和 ES6 模塊版本&#xff08;稱為 lodash-es&#xff09;。它們的主要區別包括&#xff1a; 模塊化&#xff1a;lodash 是傳統的 CommonJS 模塊&#xff0c;可使用 require 或 import 引入&#xff1b;lo…

2024年,搞AI就別卷模型了

你好&#xff0c;我是三橋君 2022年11月30日&#xff0c;OpenAI發布了一款全新的對話式通用人工智能工具——ChatGPT。 該工具發布后&#xff0c;僅用5天時間就吸引了100萬活躍用戶&#xff0c;而在短短2個月內&#xff0c;其活躍用戶數更是飆升至1億&#xff0c;成為歷史上增…

ARP協議介紹與ARP協議的攻擊手法

ARP是什么&#xff1f; ARP是通過網絡地址&#xff08;IP&#xff09;來定位機器MAC地址的協議&#xff0c;它通過解析網絡層地址&#xff08;IP&#xff09;來找尋數據鏈路層地址&#xff08;MAC&#xff09;的網絡傳輸協議。 對個定義不能理解的話&#xff0c;可以結合 TCP/I…

《戀與深空》2.0上線肉鴿模式,乙游玩家會買賬嗎?

乙游和肉鴿&#xff0c;看似八竿子打不著的兩個賽道&#xff0c;被疊紙給融合起來了。 根據《戀與深空》官方消息&#xff0c;即將在7月15日更新的2.0交錯視界版本中&#xff0c;會上線全新常駐玩法“混沌深網”&#xff0c;配置高隨機性Roguelike模式&#xff0c;并搭載了管理…

理想文檔發布了~一個集合了多個優秀開源項目的在線云文檔

兩年前我做了一個簡單的在線云文檔項目&#xff0c;選擇了開源的思維導圖、白板、流程圖、幻燈片等項目&#xff0c;在它們基礎上添加了云存儲的功能&#xff0c;然后寫了一個簡單的工作臺管理文件夾和文件&#xff1a; 放在了自己的個人網站上使用&#xff0c;同時寫了一篇水文…

【Leetcode 每日一題】349. 兩個數組的交集

給定兩個數組 nums1 和 nums2 &#xff0c;返回 它們的 交集 。輸出結果中的每個元素一定是 唯一 的。我們可以 不考慮輸出結果的順序 。 示例 1&#xff1a; 輸入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 輸出&#xff1a;[2]示例 2&#xff1a; 輸入&#xff1a;nums…

[web]-代碼審計-運維失誤

打開頁面可以看到如下&#xff1a; 1、查看源代碼&#xff0c;發現驗證碼功能是正常生成的隨機的&#xff0c;輸入也沒有過濾&#xff0c;無法采用爆破。 2、根據題目提示運維失誤&#xff0c;使用dirsearch掃描&#xff0c;發現提交的地址check.php, 使用php5、.bak可以打開&…

2.The DispatcherServlet

The DispatcherServlet Spring的Web MVC框架與許多其他Web MVC框架一樣&#xff0c;是請求驅動的&#xff0c;圍繞一個中央Servlet&#xff08;即DispatcherServlet&#xff09;設計&#xff0c;該Servlet將請求分派給控制器&#xff0c;并提供其他功能以促進Web應用程序的開發…

創建I/O文件fopen

#include〈stdio.h〉 int mian(int argc,char *argv[]){ FILE *fp;//結構體fp fpfopen&#xff08;“1.txt”&#xff0c;“r”&#xff09;; }

程序的控制結構——if-else語句(雙分支結構)【互三互三】

目錄 &#x1f341; 引言 &#x1f341;if-else語句&#xff08;雙分支結構&#xff09; &#x1f449;格式1&#xff1a; &#x1f449;功能&#xff1a; &#x1f449;程序設計風格提示&#xff1a; &#x1f449;例題 &#x1f449;格式2&#xff1a; &#x1f449;…