【进阶篇-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.mzph.cn/web/44392.shtml

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

相关文章

苹果入局,AI手机或将实现“真智能”?

【潮汐商业评论/原创】 “AI应用智能手机不就是现在的AI手机。” 当被问到现阶段对AI手机的看法时&#xff0c;John如是说。“术业有专攻&#xff0c;那么多APP在做AI功能&#xff0c;下载用就是了&#xff0c;也用不着现在换个AI手机啊。” 对于AI手机&#xff0c;或许大多…

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 毫秒…

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;同时写了一篇水文…

[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应用程序的开发…

程序的控制结构——if-else语句(双分支结构)【互三互三】

目录 &#x1f341; 引言 &#x1f341;if-else语句&#xff08;双分支结构&#xff09; &#x1f449;格式1&#xff1a; &#x1f449;功能&#xff1a; &#x1f449;程序设计风格提示&#xff1a; &#x1f449;例题 &#x1f449;格式2&#xff1a; &#x1f449;…

Monaco 使用 ColorProvider

Manco 中可以使用调色板对色值进行修改&#xff0c;首先看一下调色版效果。 调色板是 Monaco-Editor 中一个特别的组件&#xff0c;通过两个方法实现呼出调色板&#xff0c;provideColorPresentations 显示调色窗口&#xff0c;provideDocumentColors 监听页面的变更&#xff0…

如何将libwebsockets库编译为x86架构

在之前的文章中&#xff0c;我们已经详细介绍了如何交叉编译libwebsockets并将其部署到ELF 1开发板上。然而在调试阶段&#xff0c;发现将libwebsockets在Ubuntu环境下编译为x86架构可能更为方便和高效。 通过在主机环境中编译运用x86架构下的libwebsockets库&#xff0c;可以…

阿里ChatSDK使用,开箱即用聊天框

介绍&#xff1a; 效果&#xff1a;智能助理 ChatSDK&#xff0c;是在ChatUI的基础上&#xff0c;结合阿里云智能客服的最佳实践&#xff0c;沉淀和总结出来的一个开箱即用的&#xff0c;可快速搭建智能对话机器人的框架。它简单易上手&#xff0c;通过简单的配置就能搭建出对…

公益快报 | 中科亿海微以企业奖学金为纽带,深化校企合作

近日&#xff0c;为回报母校、激励湖南大学机器人视觉感知与控制技术国家工程研究中心广大学生&#xff0c;中科亿海微电子科技&#xff08;苏州&#xff09;有限公司&#xff08;简称“中科亿海微”&#xff09;捐赠设立企业奖学金。此项奖学金的设立标志着校企合作迈向全方位…

实现组件存储 WinSxS 文件夹解析

目录 背景 目录名的组成 解析目录结构 更新&总结 文章出处链接&#xff1a;[https://blog.csdn.net/qq_59075481/article/details/140385969]. 背景 WinSxS 文件夹位于 Windows 文件夹中&#xff0c;例如 C: \Windows\WinSxS。它是 Windows 组件存储文件的位置。 Wind…

idea启动vue项目一直卡死在51%,问题分析及其如何解决

如果你的项目也一直卡在百分之几十&#xff0c;你可以参考下面的方法&#xff0c;试一试能否解决 问题描述&#xff1a; 通过在idea终端中输入命令 npm run serve 启动vue项目&#xff0c;启动进程一直卡在51% 如何解决&#xff1a; 检查 < template > 标签中的html内容…

深度学习中的超参管理方法:argparse模块

在深度学习方法中我们不可避免地会遇到大量超参数如&#xff08;batch_size、learning_rate等&#xff09;。不同的超参数组合可以得到不同的训练/测试结果。所以在训练和测试过程中我们需要不断调整超参数获得理想的结果&#xff08;炼丹&#xff09;&#xff0c;如果每一次去…

【Windows】硬链接和软链接(OneDrive同步指定目录?)

文章目录 一、场景带入二、Windows下的硬链接和软链接2.1 硬链接&#xff08;Hard Link&#xff09;2.2 软链接&#xff08;符号链接&#xff0c;Symbolic Link&#xff09;2.3 软链接和快捷方式2.4 应用场景 三、OneDrive中的应用3.1 错误姿势3.2 好像可行的尝试3.3 合理的解决…