栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java--异常处理机制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java--异常处理机制

异常:
程序在运行过程中,发现的意外情况(不符合预期的情况)。异常会导致程序中断。程序无法执行完毕。
异常的捕获:
异常处理使得开发者可以应对可能出现的异常,进行处理,使程序依然执行,并有效。
基本用法:
try{
//正常业务逻辑,仅放置可能会出现异常的代码部分
}catch(Exception 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 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:如上文。

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号