异常的捕获和处理

南笙酒味 提交于 2020-01-18 20:39:40

异常的捕获和处理

异常概述

java异常处理


初识异常
异常:程序中运算过程中出现的错误,例如:文件找不到,网络连接中断,算术运算序偶无,数组下标越界等运行程序。
空指针异常

上图为空指针异常

java异常体系结构
java中异型有很多种类型,java体系结构图如下所示

在这里插入图片描述

Error类:
表示仅靠程序本身无法恢复的严重错误,如内存溢出,动态链接失败,虚拟机错误…假如出现这样的错误,应尽力使程序安全退出。
Exception类:
由java应用程序抛出和处理的严重错误,如所需文件找不到,网络连接不同或连接中断,算数运算错误,数组下标越界…
Exception又分为两大异常类:
1.运行时异常:包括RuntimeException以及所有子类,不要求程序必须对它们进行处理。
2.Checked异常(非运行时异常):除了运行时异常外的其他从Exception类继承来的异常类。

异常 说明
Exception 异常层次结构的根类
ArithmecticException 算数错误异常,如以零作为除数
ArrayIndexOutOfBoundsException 数组下标越界
NullPointerException 尝试访问Null成员
ClassNotFoundException 不能加载所需的类
InputMismatchException 与得到的数据类型与实际的输入类型不匹配
IllegalArgumentException 方法接收到非法参数
ClassCastException 对象强制类型转换出错
NumberFormatException 数字格式转换异常,如把“abc”转换成数字

java异常处理机制
处理异常的方法:
1.传统方式通过if-else处理:
缺点:
1.代码臃肿,代码量大。
2.耗精力去“堵漏洞”。
3.不能堵住所有“漏洞”。
2.java异常处理
通过5个关键字来实现:
try(尝试)、 catch(捕获) 、finally(最终) 、 throw 、throws (抛、扔)
通常用try-catch-finally 组合(捕获异常)

在catch块中处理
加入用户自定义处理信息

System.err.print("")

调用方法输出异常

e.printStackTrace();//输出异常信息的堆栈信息

异常对象常用方法

void printStackTrace();
String getMessage();//返回异常信息,熟字符串。

引发多种类型的异常
排列catch语句的顺序:先子类后父类,发生异常时按顺序逐个匹配,只执行第一个与异常类型的catch语句。
try-catch-finally 结构中 try 语句必须出现,catch,finally语句两者至少出现之一。

在try-catch中存在return语句,finally也会执行。
顺序:先执行catch中return之前的语句,再执行finally语句,最后执行return语句。

try-catch-finally 中,若不执行finally语句,唯有一种情况,执行了System.exit(1);退出JVM

如何实现下标越界异常
ArrayIndexOutOfBoundException(数组下标越界异常)

int [] arr = new int[2];
arr [10] = b;//此时会出现上面的异常

如何实现空指针异常
NullPointerException(空指针访问null对象异常)

String b = null;
System.out.print(b.equlas("a"));
//将确定因素放在前面,不确定因素放在后面

声明异常throws
throws声明某个方法可能抛出各种异常,多个异常用逗号隔开
方式一:
调用者处理异常
声明个普通方法

public void putong() throws InputMismatchException,ArithmetisException{};

public static void main(String[] args){
	new 对象a  a.putong();
	try{

	}catch(InputMismatchException){

	}catch(ArithmetisException){

	}finally{

	}
}

方法二:
调用者继续声明异常
main()方法的异常有java虚拟机处理。

抛异常 throw
throw与throws区别:
1.throw生成并抛出异常,throws声明方法内抛出了异常。
2.throw可以单独使用,throws不可以单独使用。
3.throw只能抛出一个对象,throws声明潘总出异常类型,可以抛出多个。

自定义异常
创建一个类,继承Exception

public void SexException extends Exception(){
	public SexException(){}
	public SexException(String message){
		super(message);
	}
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!