当前位置: 首页 > ops >正文

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.xdnf.cn/news/7722.html

相关文章:

  • 给几张图片和一段文字,怎么制作成带有语音的视频---php
  • 从零搭建SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库
  • Mysql的binlog日志
  • .NET外挂系列:4. harmony 中补丁参数的有趣玩法(上)
  • 八: 人工神经元/感知机 算法
  • Python数据可视化高级实战之一——绘制GE矩阵图
  • Windows安装MongoDb.并使用.NET 9连接
  • 深度学习+Flask 打包一个AI模型接口并部署上线
  • 【优秀三方库研读】在 quill 开源库中定义的 QUILL_LIKELY 和 QUILL_UNLIKELY 这两个宏的作用是什么
  • 【教程】Nuitka | Python打包exe新工具
  • Python 包管理工具核心指令uv sync解析
  • Brooks Polycold快速循环水蒸气冷冻泵客户使用手含电路图,适用于真空室应用
  • 什么是车载座舱产品的SRRC认证?
  • function calling简介
  • Vue组件开发深度指南:构建可复用与可维护的UI
  • python的加速方法
  • 【固废处理核心痛点】RS485转Profinet协议转换,如何提升设备监控效率?​​
  • Python训练营打卡31
  • 2025华为OD机试真题+全流程解析+备考攻略+经验分享+Java/python/JavaScript/C++/C/GO六种语言最佳实现
  • git 撤销最近的几次push
  • Linux系统编程-DAY01
  • 动态DNS管理:【etcd+CoreDNS】 vs【BIND9】便捷性对比
  • Profinet转RS485网关赋能热敏CTP冲版机:高精度数据交互的核心解码方案​​
  • C++静态函数错误解析与修复指南练习
  • 编程技能:字符串函数08,strcmp
  • 刚刚!2025年5月WOS期刊目录已更新,新增多本期刊,剔除1本SCI期刊,慎投!
  • 软件测试期末复习
  • 深入解析OrientDB:多模型数据库的技术优势与实际应用
  • 如何从不同位置将联系人导入 iPhone(完整指南)
  • STM32定时器简单采集编码器脉冲