javase_进阶 day8 递归,异常

递归

递归介绍

  • 方法直接或者间接调用本身
  • 注意:递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出现象
  • 一些算法题的实现, 都需要使用递归
public class RecursionDemo1 {/*递归介绍: 方法直接或者间接调用本身*/public static void main(String[] args) {methodA();}public static void methodA() {methodB();}public static void methodB() {methodC();}public static void methodC() {methodA();}
}

案例:计算5的阶乘如下

public static void main(String[] args) {int result = jc(5);System.out.println(result);}public static int jc(int num) {if (num == 1) {return 1;} else {return num * jc(num - 1);}
}
不死神兔 (斐波那契数列):

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?

public class RecursionDemo3 {public static void main(String[] args) {int result = get(20);System.out.println(result);}public static int get(int month) {if (month == 1 || month == 2) {return 1;} else {return get(month - 2) + get(month - 1);}}
}
猴子吃桃

猴子第一天摘下若干个桃子

当即吃了一半,还不过瘾,又多吃了一个

第二天早上又将剩下的桃子吃掉一半,又多吃了一个

以后每天早上都吃了前一天剩的一半零一个

到第10天早上想再吃时,见只剩下一个桃子了

求第一天共摘了多少桃子?

public static void main(String[] args) {System.out.println(monkey(1));
}public static int monkey(int num) {if (num == 10) {return 1;} else {// 公式 : (后一天的桃子数量 + 1) * 2;return (monkey(num + 1) + 1) * 2;}
}

异常

  • 异常介绍

  • 指的是程序在编译或执行过程中,出现的非正常的情况 (错误)

ArrayIndexOutOfBoundsException

ClassCastException

NullPointerException

注意 : 语法错误, 不是异常.

异常体系

Throwable :

Error

  • 严重级别问题

    常见的 : 栈内存溢出 (StackOverflowError) 堆内存溢出 (OutOfMemoryError)

Exception:

  • RuntimeException 及其子类:运行时异常

  • 除RuntimeException 之外所有的异常:编译时异常

编译时异常

编译阶段就出现的错误

主要起到提醒作用

运行时异常
  • 数组索引越界异常: ArrayIndexOutOfBoundsException

  • 空指针异常 : NullPointerException

  • 数学操作异常:ArithmeticException

  • 类型转换异常:ClassCastException

  • 数字转换异常: NumberFormatException

  • 小结:编译阶段没有错误, 运行时 [可能] 会出现的错误

这种错误通常都是程序员代码不严谨所造成的

异常的处理方式

异常的默认处理流程

①虚拟机会在出现异常的代码那里自动的创建一个异常对象:ArithmeticException

②异常会从方法中出现的点这里抛出给调用者,调用者最终抛出给JVM虚拟机

③虚拟机接收到异常对象后,先在控制台直接输出异常信息数据

④终止 Java 程序的运行

⑤后续代码没有机会执行了,因为程序已经噶了

异常处理方式 try…catch…
  • 能够将抛出的异常对象捕获,然后执行异常的处理方案

  • 好处:程序可以继续往下执行

格式:

try {可能会出现异常的代码} catch(异常类型1 变量) {处理异常的方案*} catch(异常类型2 变量) {处理异常的方案}

注意: 如果使用多个catch, 最大的异常需要放在最后

异常处理方式 throws 抛出
问题: 正在面临的异常, 是否需要暴露出来
  • 不需要暴露 : try…catch捕获

  • 需要暴露 : 抛出异常

  • throw 和 throws 的区别

​ throw : 用在方法中, 后面跟的是异常对象, 其作用是抛出异常对象

​ throws : 用在方法名后面, 起到声明作用

​ 声明此方法中存在异常, 调用者需要进行处理

  • 细节 :

抛出的异常对象如果是编译时异常, 必须使用 throws 声明

如果是运行时异常, 则不需要写 throws

自定义异常

自定义异常的必要
  • Java无法为这个世界上全部的问题提供异常类。

  • 如果企业想通过异常的方式来管理自己的某个业务问题,就需要自定义异常类了。

自定义异常的分类

1、自定义编译时异常

  • 定义一个异常类继承Exception.

  • 重写构造器

2、自定义运行时异常

  • 定义一个异常类继承RuntimeException.

  • 重写构造器。

异常的细节
  • Throwable的常用方法 :
方法名说明
public String getMessage()获取异常的错误原因
public void printStackTrace()展示完整的异常错误信息
  • 子类重写父类方法时,不能抛出父类没有的异常, 或者比父类更大的异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709414.shtml

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

相关文章

外包干了6个月,技术退步明显。。。。。

先说一下自己的情况,本科生,2019年我通过校招踏入了重庆一家软件公司,开始了我的职业生涯。那时的我,满怀热血和憧憬,期待着在这个行业中闯出一片天地。然而,随着时间的推移,我发现自己逐渐陷入…

Dockerfile(1) - FROM 指令详解

FROM 指明当前的镜像基于哪个镜像构建dockerfile 必须以 FROM 开头&#xff0c;除了 ARG 命令可以在 FROM 前面 FROM [--platform<platform>] <image> [AS <name>]FROM [--platform<platform>] <image>[:<tag>] [AS <name>]FROM […

搭建独立节点通常涉及哪些步骤

1.了解独立节点搭建的基础概念和原理。这包括理解独立节点搭建的含义&#xff0c;即通过云服务器等方式单独搭建自己的网站&#xff0c;以 确保网站的专属性和自主性&#xff0c;并更好地控制数据流动和安全性。1 2.选择服务器类型和配置。这包括根据需求选择合适的服务器&a…

shardingsphere 集成springboot【水平分表】

创建sharding_sphere数据库 在数据库中创建两张表&#xff0c;t_order_1和t_order_2 分片规则&#xff1a;如果订单编号是偶数添加到t_order_1,如果是奇数添加到t_order_2 创建实体类 public class Order { private Integer id; private Integer orderType; private Int…

Java+SpringBoot+Vue+MySQL:员工健康管理技术新组合

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

mysql字节长度限制报错处理方法

报错如下&#xff1a; ERROR 1118 (42000) at line 274: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB pr efix of 0 bytes is stored inline 或者 ERROR 1118 (42000) at line 1240: Row size too large. T…

TCP的三次握手和四次挥手 | 查看网络状态

三次握手和四次挥手是在计算机网络中用于建立和终止TCP连接的协议。这两个过程是TCP协议的重要组成部分&#xff0c;确保数据的可靠传输。 三次握手指的是在客户端和服务器之间建立连接时的步骤。具体流程如下&#xff1a; 客户端向服务器发送一个连接请求报文段&#xff08;…

Git教程-Git的基本使用

Git是一个强大的分布式版本控制系统&#xff0c;它不仅用于跟踪代码的变化&#xff0c;还能够协调多个开发者之间的工作。在软件开发过程中&#xff0c;Git被广泛应用于协作开发、版本管理和代码追踪等方面。以下是一个详细的Git教程&#xff0c;我们将深入探讨Git的基本概念和…

React 模态框的设计(六)Draggable的整合

前一节课中漏了一个知识点&#xff0c;当内容很长时需要滚动&#xff0c;这个滚动条是很影响美观的。在MacOS下的还能忍&#xff0c;win系统下简直不能看。如何让长内容能滚动又不显示滚动条呢&#xff0c;我尝试过很多办法&#xff0c;最终下面这个方法目前来说是最完美的。我…

Mysql DATETIME与TIMESTAMP的区别

TIMESTAMP的取值范围小&#xff0c;并且TIMESTAMP类型的日期时间在存储时会将当前时区的日期时间值转换为时间标准时间值&#xff0c;检索时再转换回当前时区的日期时间值。 而DATETIME则只能反映出插入时当地的时区&#xff0c;其他时区的人查看数据必然会有误差的。 DATETI…

数据结构——lesson4带头双向循环链表实现

前言✨✨ &#x1f4a5;个人主页&#xff1a;大耳朵土土垚-CSDN博客 &#x1f4a5; 所属专栏&#xff1a;数据结构学习笔记​​​​​​ &#x1f4a5;双链表与单链表的区分&#xff1a;单链表介绍与实现 &#x1f4a5;对于malloc函数有疑问的:动态内存函数介绍 感谢大家的观看…

tomcat安装步骤流程

安装tomcat是基于安装java的基础上的 JAVA 举例说明&#xff1a; 关闭防火墙 下载java [rootlocalhost ~]#yum install java -y rootlocalhost ~]#yum install epel-release.noarch -y [rootlocalhost ~]#yum provides */javac [rootlocalhost data]#yum install java-1.8.0-o…

半监督学习理解

半监督 少量有标注&#xff0c;大量无标注 1.三个假设&#xff1a; (1)连续性/平滑性假设&#xff1a;相近的数据点可能有相同的标签 (2)集群假设&#xff1a;在分类问题中&#xff0c;数据往往被组织成高密度的集群&#xff0c;同一集群的数据点可能具有相同的标签。因此&…

C/C++常见的字符串操作函数

2 字符串操作 ​ 由双引号&#xff08;Double Quote&#xff09;引起来的一串字符称为字符串字面值&#xff08;String Literal&#xff09;&#xff0c;或者简称字符串。注&#xff1a;字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志&#xff…

6.1 deeplabv3+的pth模型转换为rknn模型

和yolov5的pth模型转换为rknn模型类似&#xff0c;deeplabv3的pth模型转为rknn模型的步骤是&#xff1a; pth------>onnx-------->rknn 1.pth转为onnx 代码如下&#xff1a; #!/usr/bin/env python3 # -*- coding: utf-8 -*- # by [jackhanyuan](https://github.com/…

实现一个线程安全的单例模式

单例模式 单例模式能保证某个类在程序中只存在唯⼀⼀份实例,⽽不会创建出多个实例 某个类,在一个类,只应该创建出一个实例,使用单例模式,就可以对咱们的代码进行一个更严格的校验和检查 单例模式具体的实现⽅式有很多.最常⻅的是"饿汉"和"懒汉"两种单例…

Linux之定时任务01

简介 Linux定时任务是一种可执行的命令或者脚本,在特定的时间或者时间间隔下自动执行。通过在系统中预设一些需要执行的任务,可以让Linux定时任务自动执行并完成这些任务。定时任务可以用于自动备份、系统清理、监控、自动化维护等任务。 一、apache服务器监控 [rootlocalhost…

代码随想录算法训练营day27

题目&#xff1a;93.复原IP地址、78.子集、90.子集II 参考链接&#xff1a;代码随想录 93.复原IP地址 思路&#xff1a;本题的思路和上题切割回文串类似&#xff0c;也是先要写一个判断函数&#xff0c;然后一个个切割。对返回条件&#xff0c;如果路径长度已经为4&#xff…

DevEco Studio下载与安装(Windows)

下载地址&#xff1a; HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装时直接点击 next 即可。 运⾏已安装的DevEco Studio&#xff0c;⾸次使⽤&#xff0c;请选择Do not import settings&#xff0c;单击OK。 1.安装Node.js 如果本地有下载&#xff0c;可以…

前端JS 时间复杂度和空间复杂度

时间复杂度 BigO 算法的时间复杂度通常用大 O 符号表述&#xff0c;定义为 T(n) O(f(n)) 实际就是计算当一个一个问题量级&#xff08;n&#xff09;增加的时候&#xff0c;时间T增加的一个趋势 T(n)&#xff1a;时间的复杂度&#xff0c;也就相当于所消耗的时长 O&#xff1…