首页 技术 正文
技术 2022年11月15日
0 收藏 859 点赞 3,972 浏览 2273 个字

主要讲述几点:

一、异常的简介

二、异常处理流程

三、运行时异常和非运行时异常

四、throws和throw关键字

一、异常简介

异常处理是在程序运行之中出现的情况,例如除数为零。异常类(Exception)的父类是Throwable类,在Throwable类下有两个子类,即Error, Exception。两者的区别在于:

  1、Exception :这指的是程序运行时候的异常,用户可以对其进行处理。

  2、Error:这指的是JVM的错误,此时程序未执行,用户无法对其进行处理。

所有异常处理类都是Exception类或者其子类,示例:

java.lang.Object
|-java.lang.Throwable
|-java.lang.Exception
|-java.lang.RuntimeException
|-java.lang.ArithmeticExceptionjava.lang.Object
|-java.lang.Throwable
|-java.lang.Exception
|-java.lang.RuntimeException
|-java.lang.IllegalArgumentException
|-java.lang.NumberFormatException


二、异常处理流程

JAVA 异常处理机制

异常流程:
⑴ 程序发生异常时由JVM自动实例化相匹配的异常类对象,不需要用户手动new。
⑵ 判定程序之中是否存异常捕获操作,监测可能出现异常的程序。如果不存在,则将交由JVM进行异常信息输出,之后结束程序。
⑶ 如果存在异常捕获操作,则会匹配try语句后面的catch的异常类型,如果有相应匹配的catch异常类型,则有此异常处理。否则继续匹配每个catch。
⑷ 不管异常是否被成功捕获,都要执行到finally之中的代码。当finally之中的代码执行完毕之后,需要判定异常是否已经被处理了。如果异常已经被处理, 则执行其他程序,直至程序结束。如果异常未被处理,则交由JVM进行异常信息输出,之后结束程序。
注意:
⑴ 当出现多个catch异常捕获的时候,范围大的异常类要放在范围小的异常类之后。 
⑵ Exception类是所有异常类的最顶层,可以匹配所有异常,但是所有异常将会按照一个方式输出,无法区别。

三、运行时异常和非运行时异常

Exception 这种异常分两大类运行时异常和非运行时异常(编译异常)。程序中应当尽可能去处理这些异常。

运行时异常:RuntimeException类异常是java为了方便编写代码,专门设计的一个类。当使用throws定义抛出了RuntimeException类方法时候,程序不会强制捕获处理这个异常,可以有用户自行选择,如果没有进行处理,默认情况将由JVM默认处理。常用RuntimeException异常:ArithmeticExceptionNullPointerExceptionClassCastException、NumberFormatException。示例:

java.lang.Object
|-java.lang.Throwable
|-java.lang.Exception
|-java.lang.RuntimeException 运行时异常
|-java.lang.IllegalArgumentException
|-java.lang.NumberFormatException

非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

四、throws和throw关键字

package ExceptionTest;
class MyMath{
// throws定义抛出异常,出现在定义的方法上,如果出现异常由调用者处理该异常
public static int div(int x, int y) throws Exception {
int result = 0;
try {
System.out.println("*******1、数据开始处理*********");
result = x / y ;
} catch (Exception e) {
// throw关键字为在方法里抛出一个异常,也可省略
throw e ;
} finally { //finally是程序的结尾,不管是否抛出异常都会执行其中代码
System.out.println("*******2、数据处理结束*********");
}
return result;
}
}
public class ExceptionTest {
public static void main(String[] args) {
// 调用div()方法必须捕获其异常
try {
System.out.println(MyMath.div(2, 2));
} catch (Exception e) {
e.printStackTrace();
}
}
}

throws和throw关键字区别

  1、throws定义抛出异常,使用在定义的方法上,表示出现异常由调用者处理该异常,相应调用必须设置捕获throws定义抛出的异常。

  2、throw表示抛出一个异常,使用在方法之中,表示可以有catch捕获。

参考学习连接:http://blog.csdn.net/hguisu/article/details/6155636  深入理解java异常处理机制

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,581
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918