java异常处理机制

异常概述与Error的区别
异常(Exception):异常指的是程序运行时发生的不正常事件;异常能够被程序处理,保证程序继续运行下去;例如除数为0、文件没有找到、输入的数字格式不对……
错误(Error):错误程序没法处理,例如内存泄漏。发生错误后,一般虚拟机会选择终止程序运行,程序员需要修改代码才能解决相关错误。
异常举例

public class ExcptionTest {
	public  void test(){
		System.out.println("====运行前====");
		int a=10/0;
		System.out.println("====运行后====");
	}
	public static void main(String[] args) {
		ExcptionTest et= new ExcptionTest();
		et.test();
	}
}

运行结果:
(在运行期我们int型的a 被除以0 那么 这样的事件称之为不正常事件,将发生异常,异常不是错误,是不正常的事情,错误往往是跟源代码的BUG 或者内部环境有关,)在这里插入图片描述
错误:
1.错误是很难处理的,比如内存溢出等,不能够通过异常处理机制来解决。
2.错误是不能被处理的,它必须秀给源代码,编译通过才能被执行
错误示例:
在这里插入图片描述

异常分类
在这里插入图片描述
1.Throwable:可抛出的
2.Error:错误
Excertion:异常
RuntimeException:运行时异常
IOException:输入输出异常
SQLException:数据异常
indexOutOfBoundsException:索引越界
NullpointerException:空指针异常

try/catch/finally定义及使用
try:检测不安全的代码块(发现异常),try块中任何一条语句发生了异常,下面的代码将不会被执行,程序将跳转到异常处理代码块中,即catch块。因此,不要随意将不相关的代码放到try块中,因为随时可能会中断执行。

  try{
    可能会发生异常的代码
    }

catch:把抓到的类型匹配的异常捕获,保证程序能继续运行下去,catch语句必须紧跟着try语句之后,称为捕获异常,也就是异常处理函数,一个try后面可以写多个catch,分别捕获不同类型的异常。

catch(异常类型 引用名){
 异常处理代码
	}

finall:finally该内容总是会执行的,只能有一个finally语句.

基本语法

     try{
	  可能会发生异常的代码
  }catch(异常类型 引用名){
	  异常处理代码
  }finally{
 必须执行代码
  }

finally与renturn区别
1.在try中没有异常的情况下try、catch、finally的执行顺序 try — finally
2.如果try中有异常,执行顺序是try — catch — finally
3.如果try中没有异常并且try中有return这时候正常执行顺序是try ---- finally — return
4.如果try中有异常 并且try中有return这时候正常执行顺序是try----catch—finally— return
5.如果try有异常,相应catch中有return,顺序是try—catch—finally—return
throw与throws
throw
关键字throw用于显式抛出异常
抛除异常后处理
使用try-catch捕获异常
使用throws声明异常
语法
throw new 异常类构造方法;
例如:throw new Exception();

利用抛出的异常来标记不正常的事件,从而对事件流统一处理

static int avg(int n1,int n2)throws  Exception{
if (n1<0||n2<0) {               //判断方法参数是否满足条件
throw new  Exception("不能使用负数");//错误信息
}
if (n1>100||n2>100) {
throw new  Exception("数值太大了");
}
return (n1+n2)/2; // 将参数的平均值返回
}

throws
用于方法声明处,指出方法引发的异常。
可以声明多种异常类型,用逗号分开即可。
示例
public void test throws 异常1,异常2,异常3{
}
throws解析:
1.任何方法都可以使用throws关键字声明异常类型,包括抽象方法。
2.子类覆盖父类中的方法,子类方法不能声明抛出比父类范围更大的异常。
3.使用了throws的方法,调用时必须处理声明的异常,要么使用try-catch,要么继续使用throws声明
4.throw用于方法体中,用来抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常, 要么使用throws声明异常
5.throw用于方法体中,用来抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常,要么使用throws声明异常

public class Calculator {
public void div(int x,int y)  throws Exception{
//当除数为0时,抛出异常
if(y==0){
    throw new Exception();  //使用throws后,不再有编译错误
}
   System.out.println("x/y="+x/y);
}
}

自定义异常
1.自定义异常就是自己定义的异常类,也就是API中的标准异常类的直接或间接的子类
2.作用:用自定义异常标记业务逻辑的异常,避免与标准异常混淆
3.自定义异常类中往往不写其他方法,只重载需要使用的构造方法
4.可以用throw抛出自定义异常对象,使用throws声明自定义异常类型;
5.可以使用try/catch/finally处理异常

public class DataValueException extends Exception {
	public DataValueException() {
	}
	public DataValueException(String message) {
		super(message);
	}
	public DataValueException(Throwable cause) {
		super(cause);
	}
	public DataValueException(String message, Throwable cause) {
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值