笔记(day16)异常

异常机制

一.之前遇到的异常

​ 下标越界异常(指针超范围)
​ 空指针异常(指向null)
​ 类型转换异常(类型不一样)
​ 堆/栈内存溢出(递归)
​ 数字格式化异常(不是纯数字字符串转换)

二. 是什么

​ 异常就是错误的一种描述
​ 异常是java中专门响应错误的一种机制,能够有效的处理异常,并使得异常成为程序中的一部分,能够更有力的增强程序鲁棒性更易于调试
​ 发生异常的原因有很多 :
​ 1用户输入了非法数据
​ 2要找的文件不存在
​ 3 网络通信中断
​ 4 JVM溢出
功能和目的 : 出现错误后,会终止程序生命周期执行,此时引入异常后,能够保证程序不会终止,并且还能够把错误信息,进行描迷反馈

三.继承体系

image-20240812183141475

四.Execption

4.1 是什么

  • exception作为所有异常类的父类(分为RuntimeException和IOException)
    • RuntimeException : 运行时异常,一般是由于程序员粗心导致,比如空指针,比如 下标越界, 程序员完全可以通过if判断来解决这个问题
    • IOException : 编译时异常,一般需要我们重点学习,另外编译时异常是我们在编码中就需要处理的,如果不处理,不能运行

4.2 常用方法

getMessage() : 获取错误信息 一般反馈给客户查看

printStackTrace() : 打印错误追踪栈帧 一般给程序员查看,用来修改代码

4.3 try

4.3.1 第一种用法(单个异常)

try {
    // 可能会抛出异常的代码
} catch (IOException e) {
    // 处理异常的代码
}

4.3.2 第二种用法(多个异常)

​ 一个catch捕捉一个异常

​ try中可以有多个异常,但是只会有一个异常发生(前面的异常发生后结束try中代码后面的异常不会执行)
​ catch可以捕捉多个异常,但是从上到下必须是从子类到父类,或者是没有继承关系

try{
   // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}catch(异常类型3 异常的变量名3){
  // 程序代码
}

4.3.3 第三种用法

​ 1.7新特性 一个catch可以捕捉多个异常,多个异常使用|隔开,但是异常之间必须是没有哦继承关系,如果有继承关系则直接写父类即可

try{
   // 程序代码
}catch(异常类型1  | 异常类型2 异常的变量名){
  // 程序代码
}

4.3.4 第四种用法

​ java7 新特性 自动关闭资源

//传统写法
try{
	高风险代码
}catch(异常代码){
	异常处理代码;
}finally{
	关闭资源代码
}
try(打开资源代码){
	高风险代码
}catch(异常类型 异常的变量名){
	处理异常代码;
}

4.4 throws

4.4.1 第一种用法

  • ​ 只是把问题抛出,不会处理问题,只是一种提醒机制
  • ​ 当我们调用的方法抛出异常, 要么我们处理异常, 要么也抛出
  • ​ throws 可以抛出多个异常,用多个逗号隔开无所谓先后顺序,也无所谓是否继承
方法 throws 异常类型{
	代码
} 

4.4.2 第二种用法

​ 抛出多个异常,使用逗号隔开
​ 无所谓先后顺序,也无所谓继承关系

方法 throws 异常类型1,异常类型2,异常类型3{
	代码
 }

4.4.3 注意-方法覆写

  • ​ 不能比原方法拥有更宽泛的异常
    ​ 子类覆写的方法,可以不抛出异常
  • ​ 要么和父类方法抛出的异常一样
    ​ 要么是父类方法抛出异常类的子类
    ​ 要么不抛出,把异常处理
    ​ 不能是父类方法抛出异常类的父类

4.5 Finally

4.5.1 是什么

​ 必须执行的语句块,不能单独使用,需要和 try 或者 try…catch… 一起使用
​ 只有一种情况不执行 : System.exit(0) 退出JVM虚拟机

4.5.2 使用

try{
  // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}finally{
  // 程序代码
}

4.5.3 注意事项

  • 不能单独使用
  • 除了关闭虚拟机以外,finally一定会执行

4.5.4应用案例

image-20240812183529471

4.6 自定义异常

4.6.1 定义语法

​ 1创建一个异常类继承一个已有的异常类,─般继承Exception即可
​ 2如果是运行时异常,则继承RuntimeException
​ 3提供无参构造及有参构造

public class 异常类类名 extends Exception{
	public 异常类类名(){
	}
	public 异常类类名(String msg){
		super(msg)
	}
}

五.Error

on即可
​ 2如果是运行时异常,则继承RuntimeException
​ 3提供无参构造及有参构造

public class 异常类类名 extends Exception{
	public 异常类类名(){
	}
	public 异常类类名(String msg){
		super(msg)
	}
}

五.Error

主要描述的是一些系统内部错误,比如我们之前碰到的栈内存溢出 OOM(内存溢出)

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,异常处理是非常重要的一部分。当程序运行时如果出现错误,如果没有异常处理,程序就会崩溃。为了避免这种情况,Python提供了异常处理机制。 在Python中,异常处理语句使用 `try` 和 `except` 关键字来实现。`try` 语句块中包含可能会发生异常的代码,如果这段代码出现了异常,则会跳转到 `except` 语句块中执行异常处理代码。 下面是一个简单的例子: ```python try: num = int(input("请输入一个整数:")) print(10/num) except ZeroDivisionError: print("除数不能为0") except ValueError: print("输入的不是整数") ``` 在上面的代码中,我们尝试将用户输入的字符串转换为整数,并将其用作除数计算 10/num。如果用户输入的是 0,则会触发 ZeroDivisionError 异常。如果用户输入的不是整数,则会触发 ValueError 异常。如果发生异常,则会跳转到对应的 except 语句块中执行处理代码。 除了可以指定具体的异常类型,也可以使用 `except Exception` 来捕获所有异常。例如: ```python try: num = int(input("请输入一个整数:")) print(10/num) except Exception as e: print("发生异常:", e) ``` 在上面的代码中,如果发生任何异常,都会跳转到 `except` 语句块中执行处理代码,并将异常信息打印出来。 除了 `try` 和 `except`,还有 `finally` 关键字,它指定的代码块无论是否发生异常都会执行。例如: ```python try: num = int(input("请输入一个整数:")) print(10/num) except Exception as e: print("发生异常:", e) finally: print("程序执行完毕") ``` 在上面的代码中,无论是否发生异常,都会执行 `finally` 中的代码,即输出“程序执行完毕”。 总之,在Python中,异常处理是非常重要的一部分,它可以有效避免程序崩溃,提高程序的健壮性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值