【进阶篇-Day8:JAVA中递归、异常的介绍】

news2024/9/21 12:46:39

目录

  • 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) * 2
        return 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.coloradmin.cn/o/1921978.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fortran快速排序算法,示例对一维数组进行排序

fortran快速排序算法&#xff0c;示例对一维数组进行排序 0. 引言1. 快速排序方法(QuickSqrt)代码实现2. 结语 0. 引言 快速排序&#xff08;QuickSort&#xff09;是一种常用的排序算法&#xff0c;采用分治策略实现。它的基本思想是通过一趟排序将待排序的数据分割成独立的两…

[笔试训练](三十六)106:提取不重复的整数107:哈夫曼编码108:abb

目录 106:提取不重复的整数 107:哈夫曼编码 108:abb 106:提取不重复的整数 题目链接:提取不重复的整数_牛客题霸_牛客网 (nowcoder.com) 题目: ​ 题解: #include <iostream> #include <string> using namespace std; int n0; int cnt[10]; int ret0; int mai…

MySQL CONCAT函数的简单使用

CONCAT函数用于将mysql中查询多列的值拼成一列显示&#xff0c; 使用示例&#xff1a; SELECT CONCAT(attr_name,"&#xff1a;",attr_value) FROM pms_sku_sale_attr_value WHERE sku_id1; 上面SQL语句使用CONCAT函数将attr_name、attr_value两列的值拼成一列&am…

【代码随想录】【算法训练营】【第62天】 [卡码108]冗余连接 [卡码109]冗余连接II

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 62&#xff0c;又是一个周一&#xff0c;ding~ 题目详情 [卡码108] 冗余连接 题目描述 卡码108 冗余连接 LeetCode类似题目684 冗余连接 解题思路 前提&#xff1a; 思路&#xff1a; 重点&a…

如何对odoo17网站cookies进行配置(How to configure cookies for Odoo 17 website?)

浏览器cookies具有缓存和加速的作用&#xff0c;odoo17 website 模块内置了cookies的选项: &#xff08;Browser cookies have the function of caching and acceleration, and the Odoo 17 website module has built-in options for cookies:&#xff09; 1、安装website模块后…

TCP传输控制协议

传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由IETF的RFC 793[1]定义。 TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机…

【C++】哈希表的模拟实现及 unordered_set 和 unorderded_map 的封装

目录 前言一、哈希表的模拟实现1.1 哈希表的改造1.1.1 模板参数列表的改造1.1.2 增加迭代器操作 1.2 哈希表的模拟实现1.2.1 哈希表中仿函数的实现1.2.2 哈希表中节点类的实现1.2.3 哈希表中迭代器类的实现1.2.4 哈希表中构造函数、析构函数和 Clear() 函数的实现1.2.5 哈希表中…

JZ62 孩子们的游戏(圆圈中最后剩下的数)

题目来源&#xff1a;牛客 题目描述&#xff1a; 每年六一儿童节&#xff0c;牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。其中&#xff0c;有个游戏是这样的&#xff1a;首先&#xff0c;让 n 个小朋友们围成一个大圈&#xff0c;小朋友们的编号是0~n-1。然后&…

Git 课程任务

** ** https://github.com/InternLM/Tutorial/pull/905 https://github.com/onlyzer0/all_you_need/blob/main/README.md

Dify中固定递归字符文本分割器的chunk长度计算方式

本文主要从源码角度剖析了Dify中FixedRecursiveCharacterTextSplitter的chunk长度计算方式。 1.self._length_function(chunk) 源码位置:dify\api\core\splitter\fixed\_text\_splitter.py\FixedRecursiveCharacterTextSplitter类\split\_text方法\self.\_length\_function(…

实验9 存储过程与函数的创建管理实验

一、实验目的&#xff1a; 理解存储过程和函数的概念。掌握创建存储过程和函数的方法。掌握执行存储过程和函数的方法。掌握游标的定义、使用方法。 二、实验内容 1&#xff0e;某超市的食品管理的数据库的Food表&#xff0c;Food表的定义如表所示&#xff0c; Food表的定义…

GESP 2023年12月C++二级真题

参考程序1&#xff1a; #include<iostream> using namespace std;int first,second; int m,n; int sum 0;int fn(int n) {if(n1) {return first;} else if (n2) {return second;} else {return fn(n-1)fn(n-2);} } int main() {cin>>first>>second;cin>…

【Golang】map的使用

map声明的方式 //声明var m map[string]string//在使用map之前&#xff0c;先make&#xff0c;make的作用就是给map分配空间m make(map[string]string)m["lover"] "Yzx"m["friend1"] "Zxw"m["friend2"] "Zzc"…

【电子通识】什么是无源元件的认证用可靠性试验标准AEC-Q200?

目前电动汽车已经是一个大趋势&#xff0c;汽车上安装有由多个电子零部件构成的ECU&#xff08;电子控制单元&#xff09;。即使汽车在恶劣的环境下行驶&#xff0c;电子零部件也必须不出故障地正常工作。因此&#xff0c;车载电子零部件与消费类电子相比&#xff0c;要求其达到…

Idea调试Kotlin代码

1.配置java虚拟机jvm远程调试 例如 启动程序配置 java -agentlib:jdwptransportdt_socket,servery,suspendn,address127.0.0.1:5005 -jar KtTest.jar IDEA配置远程调试JVM idea编译的Kt代码为 // IntelliJ API Decompiler stub source generated from a class file // Im…

人工智能是帮助开发人员还是取代他们?

最近&#xff0c;神经网络已经成为应用开发中不可或缺的工具。它们大大简化和加速了这一过程。 例如&#xff0c;使用GitHub Copilot&#xff0c;可以根据任务描述自动生成重复的代码部分。神经网络可以创建和运行测试&#xff0c;识别错误&#xff0c;甚至提出修复错误的方法…

数据库管理软件Navicat Premium介绍

1、点击连接 2、主界面 3、软件版本 待续...

【ZYNQ】VDMA 的使用

VDMA, Video Direct Memory Access 是 Xilinx 官方提供的高速内存存取 IP,采用 AXI4-Stream 与 AXI4 协议实现存储映射接口(Memory Map)与非存储映射接口(Non-Memory Map)接口的转换,主要用于视频数据缓存,同时提供帧缓存与帧同步控制功能。本文主要介绍 AXI VDMA 的配置…

博客文章多平台发布工具

做过博客分享和自媒体的同学应该都知道&#xff0c;在多个平台上同步发布、更新自己的原创内容&#xff0c;是快速传播知识、提高用户触达率的有效方式。 然而&#xff0c;一篇文章要在N个平台上重复进行编辑、排版、图片/视频上传的苦恼&#xff0c;你一定经历过吧&#xff1…

字符串哈希详解,单hash,双hash,滚动哈希

一、字符串哈希 1.1 基本概念 字符串哈希 将不同的字符串映射成不同的整数。 思想&#xff1a;将字符串映射成一个 p进制数字。 我们定义如下哈希函数&#xff1a; h a s h ( s ) ∑ i 1 n s [ i ] p n − i ( m o d M ) 其中 s 为长度为 n 的字符串&#xff0c;下标从…