java中的异常捕获和处理

1、认识异常

异常概念:异常是指在程序运行过程中所发生的不正常事件。

2、java中异常体系结构

java中异常有很多异常类型,java中所有异常类型都是Throwable类的子类,它有两个子类:Errow类和Exception类。

  • Error类:表示仅靠程序本省无法恢复的严重错误,如内存溢出,虚拟机错误等。
  • Exception类:是java应用程序抛出和处理的非严重错误。

Exception类可以分为两大异常:

  1. 运行是异常:包括RuntimeException及其所有的子类
  2. Checked异常:非运行时异常,如SQLException等。

重点关注运行时异常:以下是一些常见的异常

异常说明
Exception所有运行时异常的父类
ArithmeticException算术错误异常,如以0作为除数
ArrayIndexOutOfBoundsException数组越界
NullPotinterException空指针异常
ClassNotFountdException不能加载所需的类
InputMismatchException类型不匹配
IiiegalArgumentExcepiton方法接到非法参数
ClassCastException对象强制类型转换错误
NumberFormatException数字格式转换异常,如把“abc”转换成数字123

3.Java中异常处理机制

Java中异常处理通过5个关键字来实现:try,catch,finally,throw,thorws.

(一):使用try-catch处理异常

代码如下:

public class Test3 {
	public static void main(String[] args) {
		try {
			Scanner input = new Scanner(System.in);
			System.out.println("请输入被除数:");
			int num1 = input.nextInt();
			System.out.println("请输入除数:");
			int num2 = input.nextInt();
			// 使用格式化字符串和参数返回一个格式化字符串
			System.out.println(String.format("%d/%d=%d", num1, num2, num1 / num2));
			System.out.println("感谢使用本程序!");
		} catch (Exception e) {         // 异常捕获
			System.out.println("出现错误:被除数和除数必须是整数," + "除数不能为0");
			e.printStackTrace();         // 异常对象e,打印异常堆栈信息(方便调试)
		}
	}
}

注意:void  printSitackTarace():输出异常的堆栈信息。

String getMessage():返回异常信息描述字符串,他也是printSitackTarace()输出信息的一部分。

(二):try-catch-finall处理异常

在catch后面加上一个finally块,表示是否发生异常,finally语句块都会执xing行

(除非catch块中执行了System.exit(1)语句,退出了java虚拟机)

try-catch-finally结构中try语句块是必须存在的,catch,finally语句块可以自己选择,但是两者必须有一种存在!

注意:如果在catch语句块中加上了return语句,那么finally语句块也会执行。

执行的顺序是:先执行catch语句块中return之前的语句------再执行finally语句-------最后执行catch语句块中的return语句

(三):使用多重cathc处理异常

public class Test6 {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		try {
			System.out.println("请输入被除数:");
			int num1=input.nextInt();
			System.out.println("请输入除数:");
			int num2=input.nextInt();
			//使用格式化字符串和参数返回一个格式化字符串
			System.out.println(String.format("%d/%d=%d",num1,num2,num1/num2));

            //多重catch的使用
		} catch (InputMismatchException e) {		    //捕获类型不匹配异常
			System.err.println("被除数和除数必须是整数!");
		} catch (ArithmeticException e){                //捕获算术异常
			System.err.println("除数不能为0!");
		} catch (Exception e) {                        
			System.err.println("其它未知异常。");
		} finally {
			System.out.println("感谢使用本程序!");
		}
	}
}

//注意:多重catch的使用,一定是先从子类开始,最后到父类Exception类

4.使用throws声明异常

  • 通过try-catch捕获并处理异常。
  • 通过throws继续声明异常。如果调用者不知道如何处理该异常,可以继续通过throws声明异常,让上一级调用者处理异常。如果上一级,或者一直不处理,main()方法声明的异常将由java虚拟机处理。

5.使用throw抛出异常

  • throw关键字可以自行抛出异常,把问题交给调用者去解决。

6.throw和throws的区别

区别throwthrows
作用throw用于程序员自动抛出异常声明该方法内抛出了异常
位置throw位于方法体内部,可以作为单独语句使用必须跟在方法参数列表的后面,不能单独使用
内容throw抛出一个异常对象throws后面跟异常类,可以跟多个
   

7.Java中,可以自定义异常类,一般需要继承Exception或者RuntimeException类。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值