首页 / JAVA / Java中异常的基础介绍
Java中异常的基础介绍
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中异常的基础介绍,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5859字,纯文字阅读大概需要9分钟。
内容图文
![Java中异常的基础介绍](/upload/InfoBanner/zyjiaocheng/627/d9603ee97f5648e08b2f86eda679f926.jpg)
1.异常的概念&异常体系
异常,指的是程序在执行过程中出现的非正常的情况,最终会导致JVM非正常停止。
在Java中,异常本身就是一个类。
Java处理异常的方式是中断处理。
异常指的不是语法错误,语法错了,编译就不能通过,也不会产生字节码文件,根本不能运行。
异常的根类是java.lang.Throwable,其下有两个子类:
java.lang.Exception和java.lang.Error
平常说的异常指的是Exception。
Error是工程师不能处理的,只能尽量避免;
Exception是由于使用不当导致,是可以避免的。
2.异常的分类
Exception是在编辑编译期异常,在进行编辑编译(写代码)时Java程序出现的问题。
RuntimeException是运行期异常,Java程序在运行过程中出现的问题。
Exception是异常,而Error是错误。
异常就相当于有了一个小毛病(相当于人体的感冒,发烧),把异常处理后,程序能够继续执行(吃点感冒药好了后能够继续生活)。
错误就相当于程序患有一个无法治愈的疾病(如艾滋,非典),必须修改源代码程序才能继续执行。
3.异常的处理过程解析
假设在一个索引最大为2的数组中访问了索引为3的位置,则会出现索引越界异常(new ArrayIndexOutOfBoundsException("3");),异常的处理过程如下:
访问了数组中的3索引,而数组是没有3索引的,这时候jVM就会检测出程序会出现异常
JVM会做两件事情:
1).JVM会根据异常产生的原因创建一个异常对象 ,这个异常对象包含了异常产生的(内容,原因,位置)
new ArrayIndexOutOfBoundsException("3");
2).在异常出现的那个方法中,没有异常的处理逻辑(ry-.catch),那么JVM就会把异常对象抛出给方法的调用者
main方法来处理这个异常
main方法接收到了这个异常对象main方法也没有异常的处理逻辑
继续吧对象抛出给main方法的调用者JVM处理
JVM接收到了这个异常对象做了两件事情
1).把异常对象(包含内容,原因,位置)以红色的字体打印在控制台
2).JVM会终止当前正在执行的java程序-->中断处理
4.throw关键字
throw关键字都作用:可以使throw关键字在指定的方法中,抛出指定的异常。
使用格式:
throw new XXXException(“异常产生的原因”)
注意:
1).throw关键字必须写在方法的内部。
2).throw关键字后边的new的对象必须是Exception或者Exception的子类对象。
3).throw关键字抛出的指定的异常对象,就必须处理这个异常。
throw关键字后边创建的是RuntimeException或者RuntimeException的子类对象,我们可以不处理,默认交给JVM处理(打印异常类对象中断程序)
throw关键字后边创建的是编译异常(写代码的时候报错),我们就必须处理这个异常,要么throws,要么try...catch。
以后(工作中)我们首先必须对方法传递的参数进行合法性校验。
如果参数不合法,那么我们就必须用抛出异常的方式,告知方法的调用者,传递的参数有问题。
空指针异常,索引越界异常都是运行期异常,对于运行期异常,我们都不用处理,默认交给JVM处理。
5.Objects的非空判断
Objects中的静态方法:
public static <T> T requireNOnNull(T obj):查看指定引用对象不是NULL。
源码如下:
public static <T> T requireNonNull(T obj){
if(obj == null)
throw new NullPointerException();
return obj;}
6.throws关键字(注意:和第四点不同)
throws关键字:异常处理的第一种方式,交给别人处理。
作用:
当方法内部抛出异常对象时,那么就必须处理这个异常对象。
可以使用throws关键字处理异常对象,会把异常会把异常对象声明抛出给方法的调用者处理(给别人处理,自己不处理),最终交给JVM处理--->中断处理。
使用格式:在方法声明时使用
修饰符 返回值类型 方法名(参数列表)throws AAAException,BBBException
{
throw new AAAException(“产生原因”);
throw new BBBException(“产生原因”);
...
}
注意:
1).throws关键字必须写在方法声明处。
2).throws关键字后边声明的异常必须是Exception或者是Exception的子类。
3).方法内部如果抛出了多个异常对象,那么throws后边必须也声明多个异常。如果抛出了多个异常对象有子父类关系,那么直接声明父类异常即可。
4).调用了一个声明抛出异常的方法,我们就必须处理声明的异常。要么继续使用throws声明抛出,交给方法的调用者,最终交给JVM;要么try...catch自己处理。
7.try...catch异常处理
这是Java中异常处理的第二种方式:自己处理。
格式:
try{可能异常的代码
}catch(定义一个变量,用来接收try中抛出的异常对象){
异常处理的逻辑,接收异常对象之后,怎么处理对象,一般在工作中,会把异常记录在一个日志中}
...
catch(异常类名 变量名){处理逻辑}
注意:
1).try中可能抛出多个异常,那么就可以使用多个catch来处理这些异常。
2).如果try中产生了异常,那么就会执行catch中的异常处理逻辑,执行完毕catch中的处理逻辑,继续执行try...catch之后的代码。
如果try...catch中没有产生异常,那么就不执行catch中异常的处理逻辑,执行完try中的代码,继续执行try...catch后的代码。
8.finally代码块
在finally中的代码,无论是否有异常产生,都将会执行。
使用方法:直接写在try...catch之后即可
try{可能异常的代码
}catch(定义一个变量,用来接收try中抛出的异常对象){
异常处理的逻辑,接收异常对象之后,怎么处理对象,一般在工作中,会把异常记录在一个日志中}
...
catch(异常类名 变量名){处理逻辑
}finally{“finally代码块”}
注意:
1).finally不能单独使用,必须和try...catch一起使用。
2).finally一般用于资源释放(资源回收),无论程序是否出现异常,最后都要资源释放(IO)。
9.异常的注意事项
1).多异常的捕获与处理
在多个异常捕获时如何处理?
分为三种处理方式:多个异常分别处理、多个异常一次捕获多次处理、多个异常一次捕获一次处理。
对多个异常一次捕获,分别处理需要注意:在catch里边定义的异常设置,如果有子父类关系,那么子类的异常变量必须写在上边,否则会报错。
运行时异常被抛出可以不处理,即不捕获也不声明抛出。
默认给虚拟机处理,终止程序,什么时候不抛出运行时异常了,再来继续执行程序。
2).finally有return语句
如果finally有return语句,那么永远返回的都是finally中的结果,需要避免该情况。
3).子父类异常
如果父类抛出了多个异常,子类重写父类的方法时,只能抛出和父类相同的异常或是父类异常的子类或者不抛出异常。
父类方法没有抛出异常,子类重写父类该方法时,也不可以抛出异常,此时,子类产生该异常,只能是捕获处理,不能声明抛出。
即:父类异常是什么样,子类异常就是什么样。
10.自定义异常类
java提供的异常类,不够我们使用,需要自己定义一些异常类
格式:
public CLass XXXExcepiton extends Exception | Runt imeException{
添加一个空参数的构造方法
添加一个带异常信息的构造方法
}
注意:
1.自定义异常类一般都是以Exception结尾,说明该类是一个异常类。
2.自定义异常类,必须的继承Exception或者RuntimeException。
继承Exception:那么自定义的异常类就是一个编译期异常 ,如果方法内部抛出了编译期异常,就必须处理这个异常,要么throws, 要么try...catch
继承RuntimeException:那么自定义的异常类就是一个运行期异常 ,无需处理,交给虚拟机处理(中断处理)。
内容总结
以上是互联网集市为您收集整理的Java中异常的基础介绍全部内容,希望文章能够帮你解决Java中异常的基础介绍所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。