java--异常处理机制

异常:

程序在运行过程中,发现的意外情况(不符合预期的情况)。异常会导致程序中断。程序无法执行完毕。

异常的捕获:

异常处理使得开发者可以应对可能出现的异常,进行处理,使程序依然执行,并有效。

基本用法:

try{
//正常业务逻辑,仅放置可能会出现异常的代码部分
}catchException e){
//异常处理代码。如何处理异常
}
例子:
package com.situ.chapter2;

public class Test2 {

    public static void main(String[] args) {
	// TODO 自动生成的方法存根
	int[] a = {1,2,3,4,5};//语法糖,简写
	
	try {
	a[100] = 10;
	}catch(Exception e) {
	    e.printStackTrace();//输出异常位置类型
	    System.out.println("异常!");
	}
    }

}

运行截图:

在这里插入图片描述

catch:

catch表示要捕获何种类型的异常

catch 分支可以写多个,表示捕获不同类型的异常。

但是对于初学者来说,掌握Exception 的类型使用即可。

Exception 是所有异常类型的顶级父类。只是其他异常是Exception异常的子类。

可以在一个catch分支捕获多种类型的异常,使用 | 进行分割

catch分支例子

int[] a = {1,2,3,4,5};//语法糖,简写
	
	try {
	a[100] = 10;
	}catch( ArithmeticException e) {
	    e.printStackTrace();//输出异常位置类型
	    System.out.println("数学异常!");
	}catch(ArrayIndexOutOfBoundsException e){
	e.printStackTrace();
	System.out.println("数组下标越界异常!");
	}
int[] a = {1,2,3,4,5};//语法糖,简写
	
	try {
	a[100] = 10;
	}catch(ArithmeticException|ArrayIndexOutOfBoundsException e) {
	    e.printStackTrace();//输出异常位置类型
	    System.out.println("异常!");
	}

常见的异常类型:

1. ArithmeticException 数学异常
2. ArrayIndexOutOfBoundsException 数组下标越界异常
3.  NullPointerException 空指针异常
4.  NumberFormatException 数字格式化异常
5. ClassNotFoundException 类未找到异常
6.  IndexOutOfBoundsException 索引超出范围异常

throws:

当本方法中异常无法处理,或者不想处理,或者不适合处理,可以通过throws将异常实例抛出给上层调用者,由上层调用者来处理。

所有的异常都是通过throws一层层往上抛,最终抛到Exception异常,这个异常又抛给main函数,最终main函数抛给java虚拟机,虚拟机返回出错原因和位置。

所有的函数都包含throws方法,只是省略了。

finally:

finally 表示无论如何都会执行,不管是否出现异常。
即在finally之前,已经执行了return ,finally依然会执行,但不影响返回值。
int sum =0;
	try {
	    for(int i=0;i<=100;i++) {
		if(i<100) {
		    sum+=i;
		}
	    }
	}catch(Exception e) {
	    System.err.println("异常!");
	}finally {
	    sum=-100;
	}
	System.out.println(sum);

因为fianlly必须执行,所以sum=-100
在这里插入图片描述

throw:

虽然和throws关键词相像,但是它的作用是手动抛出(触发,创造)一个异常(可以自定义)。

例子

public class Test2 {

    private static final Exception ExceptionInstance = null;

    public static void main(String[] args) {
	// TODO 自动生成的方法存根
	/*
	 * int[] a = {1,2,3,4,5};//语法糖,简写
	 * 
	 * try { a[100] = 10; }catch(ArithmeticException|ArrayIndexOutOfBoundsException
	 * e) { e.printStackTrace();//输出异常位置类型 System.out.println("异常!"); }
	 */
	int sum =0;
	try {
	    sum++;
	    throw  ExceptionInstance;
	    //sum++;//这里编译器会报错,因为之前出像异常,程序不会执行到这里
	}catch(Exception e) {
	    System.out.println("异常!");
	}finally {
	    sum++;
	}
	System.out.println(sum);
    }

}

运行结果:
在这里插入图片描述

有关于异常的面试题:

1.throws和throw有什么区别吗?
如上文。

2.final和finally有什么区别吗?
final是修饰符表示最终的,不可被修改的,其他修饰类、对象、变量的作用,大家可以自行上网找找。
fianlly:如上文。

答案就在上文中了,大家可以仔细读一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A little sea pig

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值