您的位置:首页 > 编程语言 > Java开发

(十二)java异常处理

2019-08-14 20:21 218 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_43070500/article/details/99478260

(十二)java异常处理

  1. 异常就是导致程序无法正常运行的错误。 下图就是异常类的父子图。

1. 代码一旦抛出异常,后面的代码就不会被执行了

2. 异常的分类
①非检查性异常,在编译期间不会报错,包括空指针异常,数组越界,除以0.(就是上图中画圈的3个)

②检查性异常 ,在编译期间就会报错,只有解决了程序才能执行。
处理方式:在类中抛出异常或者用try catch包围异常。
区别:直接抛出不会运行后面的代码。
而catch捕捉会运行后面的(写在try-catch外面的)代码

3. 异常的处理过程
抛出异常,捕获异常,处理异常

4. try-catch捕捉异常方式
try中写可能存在异常的代码,catch用来捕捉异常,一个try后面可以有多个catch,catch可以捕捉不同的异常,根据异常的不同,可以进行不同的异常处理。但是,只要捕获到一个异常,程序就终止了,即后续可能存在异常的代码块(try{}中)也就不会执行了。
当try代码块中有异常抛出,系统就会从catch中寻找匹配的异常,直至遇到类型匹配的异常为止。一般而言,异常捕获都是从小的异常(子类)到大的异常(父类)。

5. exception 是所有异常的父类,只能写在最后一个catch中,如果写在第一个catch里面,后面的异常处理就不会被执行了。例子如下
第二个框是没有处理异常,将异常抛出了,后面打印语句就无法运行了。结果图如下

6. finally代码块,是放在try-catch语句后面的。意思是,系统无论是否发生异常,finally里的代码都会被运行。一般在finally语句中可以进行资源的清除操作。如流的关闭。注意:当try或catch代码块中执行了System.exit(0)时,finally代码块中的内容才不被执行 。

7. throws 声明异常??????谁调用,谁解决
如果方法中某一个语句执行时可能产生异常,但是不确定如何去解决,那么就可以将此异常使用throws抛出。throws只能声明异常,但是不能处理,声明出异常,交给调用他的方法去处理。通俗一点讲:throws就是自己出现问题了,自己不去解决,而是把问题提(抛)出来,来交给别人(调用他的)来处理。
注意:throws后面可以抛出多个异常。

8. throw关键词
throw是强制抛出异常,与throws 或者 try-catch连用。
通常与throws连用,强制抛出异常。
throw 抛出的是具体的异常,没有被处理。由调用他的方法处理。

9. 区别
①throws 出现在方法声明上,而throw通常都出现在方法体内。
②throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某个异常对象。

10. 自定义异常
自定义异常类继承父类exception,并且写上一个带参的构造方法。方便给自己在做项目的时候使用。
例子:编写一个检查给定的数字的数据类型是否为byte的程序 ,如果此数字超出byte数据类型表示的数的范围,则引发 用户自定义的异常ByteSizeException,并显示相应的错误信息。
①先写一个继承exception的子类ByteSizeException

public class ByteSizeException extends Exception {
//一个带参构造方法,用于提示错误信息
public ByteSizeException(String arg0) {
super(arg0);
}
}

②写一个测试类,使用throw抛出异常。

public class TestByteSizeException {
public static void main(String[] args) {
System.out.println("请输入byte型数");
Scanner scanner=new Scanner(System.in);
int i=scanner.nextInt();
if (i<=127&&i>=-128) {
System.out.println("输入合法");
}else {
try {
throw new ByteSizeException("输入的不是BYTE类型数字!");
} catch (ByteSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
System.out.println("666");
}
}
}
}

体会:一开始没有明白throws的具体含义,模糊了他与try-catch的关联,让我费解了好久,现在懂了,记录下来。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: