异常的捕获与处理

异常:导致程序中断运行的一种指令流。
在Java中一切异常都以类和对象的形式存在,除了Java中提供的各类异常类,用户还能根据自己需要自己定义异常类。
Java异常处理机制的优点:易于使用、可自行定义异常类、处理抛出的异常的同时不会降低程序运行速度。

异常处理格式:
try{
可能出现理异常的代码
}catch(异常类型){
//编写异常处理语句
}[catch(异常类型){
//编写异常处理语句
}…]
[finally{ //finally块可以省略
处理完异常最后做的处理(一定会运行的代码)
}]
Try:用来检测异常
Catch:用来捕获异常 //可以有多个
Finally:释放资源(IO中常用于释放资源)
如果在try中发生异常,会自动进入catch语句中寻找对应的错误类型进行相应的处理。最后不管程序是否发生异常finally中的语句一定会执行。

import java.util.Scanner;
public class ExceptionDemo01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);	//获取键盘输入数据
		System.out.print("请输入分子:");
		int num1=sc.nextInt();
		System.out.print("请输入分母:");
		int num2=sc.nextInt();
		try {
			System.out.println("计算结果:");
			int temp=num1/num2;
		}catch(ArithmeticException e){
			e.printStackTrace();
		}catch (Exception e) {	
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			System.out.println("错误处理结束");
		}
		
	}

}
//结果:
/*请输入分子:10
请输入分母:0
计算结果:
错误处理结束
java.lang.ArithmeticException: / by zero
	at one.ExceptionDemo01.main(ExceptionDemo01.java:14)*/

当发生异常就会生成异常类实例化对象,在try语句中对此异常进行捕捉,产生的异常类对象与catch语句中的各个异常类型进行对比,如果匹配成功则执行catch语句中的代码——Java异常处理机制

异常的继承机制:
在这里插入图片描述
Exception:一般表示的是程序中出现的问题,需要程序员解决。可以直接用try…catch语句处理。
Error:一般指JVM异常,由JVM自己处理。
通过多态的向上转型知道,我们可以使用父类Exception接受子类的所有异常,在程序中需要将范围小的异常放在范围大的异常之前,开发中有时有多个异常单独捕捉比较好!
Throwable作为所有异常的父类自然能接受所有子类异常程序自然也不会报错,但不建议用Throwable接受所有异常,毕竟Exception已经够了。

Throws与Throw关键字
Throws:将异常抛给方法调用处,由调用处进行try…catch处理。如果一直抛异常就会出现“异常所在类——>main()”——>JVM“的情况。
Throw:在方法中手工抛出异常。

public class ThrowsDemo01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Math m=new Math();
		try {
			m.div(10, 0);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("异常产生:"+e);
		}
		
	}

}
class Math{
	public int div(int a,int b) throws Exception {
		int temp=0;
		try {
			temp=a/b;
		} catch (Exception e) {
			// TODO: handle exception
			throw e;
		}finally {
			System.out.println("计算结束!");
		}
		return temp;
	}
}
//结果:
/*计算结束!
异常产生:java.lang.ArithmeticException: / by zero*/

本代码为简单演示需要,在实际开发中以finally作为异常统一的出口应尽量避免出现throw和return这样的语句。

Exception和RuntimeException
在这里插入图片描述
Exception:在程序中必须使用try…catch进行处理。
RuntimeException:作为Exception子类存在异常可以不使用try…catch处理,直接交给JVM处理。
在实际开发中最好还是用try…catch处理异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值