异常的一些认识和解决方法

1.目录
异常的分类
异常:凡是Exception的子类都是异常
编译时异常:在编译时期发生的异常,程序员可以处 理,因为编译会报错

Exception的子类但不是 RuntimeException 的子类

运行时异常: 在运行时期发生的异常,程序员也可以处 理,一般都是代码的逻辑性不够严谨不够健壮,依赖程序员的经验

RuntimeException的子类都是运行时异常

严重错误:在程序执行的整个阶段都可能发生错误,这 个错误无法解决但是可以避免,例如:StackOverflow

处理异常的目的:并不是为了修复程序的错误,而是就算程序出现了错误,也能够让程序继续执行

jvm默认是如何处理异常的?

1.打印错误信息
	a.异常名称java.lang.ArithmeticException
	b.异常的消息/by zero
	c.异常所发生的方法位置main
	d.异常所在java文件中ExceptionDemo1.java
	e.异常发生行号14
2.终止程序
	System.exit(0);

jvm处理异常方式不能够满足我们开发的需求,需要我们自己处理异常

处理异常的方式:
方式一:trt…catch…finally
格式:
try{
放置程序可能出现问题的代码
} catch {
这里放置异常处理的代码
} finally{
释放资源
}
注意: 1.try块代码越少越好
2.try块中一旦发生异常,那么try块中发生异常后面所有的代码都不会被执行
3.多个catch只会执行一个
4.exception接收异常必须放在for{}catch{}后面,满足先子类后父类

异常的执行流程:
1.程序执行到错误行,系统会创建一个异常对象。并且抛给我们
public Exception throwException() {

  •  		ArithmeticException exp = new ArithmeticException("/by zero");
     		throw exp;
    

}
2.程序进入catch进行逐个匹配异常
匹配成功,程序执行catch块代码 ArithmeticException ae = exp;
Exception e = exp;

        匹配失败,交给jvm处理
           
        处理异常的标准方式:
		1.能够显示处理的尽量显示处理,提高程序的可读性
		2.但是一定要再异常处理的最后加上父类Exception处理

Throwable类:它是所有错误的相关信息保存在这类里面,它是所有异常的父类
如何 阅读:从下往上看 先看自己写的 然后逐层往上查阅 如果不是自己写的方法出问题,再看源码方法是否出问题
源码也有可能本地方法出问题

  • 处理编译时异常和运行时异常
  • 编译时异常的处理 ctrl + 1
    运行时异常的处理 try…catch throws

throws:在某些情况下 我们不会处理异常,或者我们没有权限处理异常
在这种情况下我们可以抛出异常,在方法上抛出 谁调用有问题的方法就谁处理
千万别抛给jvm处理

Throws处理格式
[修饰符] 返回值类型 方法名(参数列表) [throws 异常类1,异常类2…] {
}

注意
1.异常的声明只是一种可能性,可能方法中没有异常,但是也可以声明
2.子类重写方法抛出的异常不能够被扩大

throw和throws的区别?
1.throws出现在方法的声明上 , throw关键字出现在方法体内
2.throws 表示一种异常的可能性,throw 表示程序的必然性
3.throws 可以声明多个异常类, throw只能抛出一个异常
4.throws 声明的是异常类,throw 抛出的是异常对象
throw抛出的是异常对象 :谁调用就将对象抛给谁
当抛出的是编译时异常的时候,必须要再方法体上声明异常
当抛出的是运行时异常的时候,可以不声明,但是建议声明

finally 关键字
1.finally修饰的代码块一定会被执行,除非碰到程序退出
例如:System.exit(0); Runtime.getRuntime().exit();
2.一般用来释放内存资源,比如关闭IO流的输入输出对象,数据库连接对象等等…

自定义异常
异常的本质就是java中对错误问题的描述的一种对象体现

Java 提供的异常不够我们自己使用,我们需要自定义异常,自己应用在我们的开发中

自定义异常的步骤
1.创建一个异常类继承Exception 或RuntimeException
2.在自定义异常类中书写构造方法即可
a.无参构造
b.带错误信息的构造方法

断言:assert关键字有两种用法
1.assert<boolean表达式>

如果<boolean表达式>为true,则程序继续执行
如果false,则程序抛出AssertionError,并终止执行

2.assert <boolean 表达式>:<错误信息表达式>

如果<boolean表达式>为true,则程序继续执行

如果为false,则程序抛出java.AssertionError,并输入< 错误信息表达式>

开启断言:右键run as–> run configurations -->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值