JAVA异常及其处理

xiaoxiao2021-02-28  108

JAVA异常及其处理

一、什么是java异常

1java异常是java程序运行过程中出现的非正常情况,在程序当中,本应该正常执行的代码,由于逻辑错误或者相关的语法错误导致的无法执行正常结果

2、异常在程序中如果不做处理,会导致程序中途瘫痪,不能正常完成特定功能

3、异常一般情况是需要通过java异常处理机制给屏蔽或者处理掉

 

二、java异常特点

1、Java异常处理是面向对象处理方式

2、一旦代码出现异常问题,JVM底层(java虚拟机)则会创建一个异常类相关的对象

3、异常对象产生后,会根据代码对异常的处理机制进行操作,其中异常处理机制包括捕获异常抛出异常两种,如果没有异常操作,则java程序会中断执行

 

三、异常体系结构

1、异常的祖宗类:Throwable其子类分为:Error(错误)和Exception(异常)

a) Error包括:AWTErrorIOErrorAnnotationFormatError等程序的编程问题,主要通过改写代码来避免

b) Exception又包括检测异常(受检异常、非运行时异常):IOExceptionSQLException ActivationException,还包括非检测异常(非受检异常、运行时异常):RuntimeException

c) RuntimeException又包括:NullPointExceptionArithmeticException等子类

 

四、异常处理机制之捕获异常

捕获异常处理机制:trycatch(可能还会有finally)

定义的格式:

try{ //可能出现异常的代码部分 }catch(异常类型 异常变量){ //执行异常操作 }catch(异常类型 异常变量){ //执行异常操作 }… finally{ //处理完try与catch操作后的收尾操作,异常统一出口 }  

异常捕获注意事项:

a)  catch定义,由上到下,异常类的范围必须由小到大或者同级别的

b) 运行时异常,catch中可以随意定义类型,程序运行时,会根据catch参数自动匹配(如果不知道异常的类型可以用 catch(Exception e){} 来捕捉

c) 非运行时异常,则catch中定义的异常,在try代码块中必须存在,如果没有类似异常存在,则不允许被定义

d) finally关键字,在进行异常处理之后,在异常的处理格式中还有一个finally语句,此语句将作为异常的统一出口,不管是否产生异常, finally的语句块一旦定义了,就一定要执行

e) 如果try中有return语句,则会先执行return语句,后执行finally,最后返回整个方法

f) catchfinally至少存在一个,try一定要存在

 

五、异常处理机制之抛出异常

1、抛出异常处理机制:throws方法抛出异常

定义的格式:

public void test() throws 异常类型{ //存在异常的代码块 }

 

注意事项:

a) 此异常主要是针对存在异常的代码块出现的异常问题,中止当前方法的执行但是程序会继续

b) 此方法把异常问题抛出给调用此方法的上一级函数当中,并调用出自行处理异常

例子:

public class Test { public static void main(String[] args) { Test t = new Test(); try { t.b(); } catch (ArithmeticException e) { e.printStackTrace(); } System.out.println("执行了main方法"); } public void b()throws ArithmeticException{ this.a(); System.out.println("执行了方法b"); } public void a()throws ArithmeticException{ int a = 10; int b = 0; int result = a/b; System.out.println("执行了方法a"+result); }}

输出的结果:

java.lang.ArithmeticException: / by zero at demo1.Test.a(Test.java:20) at demo1.Test.b(Test.java:14) at demo1.Test.main(Test.java:7) 执行了main方法

2、原理分析:1main方法调用了b方法,b方法调用a方法

2a方法a/b存在异常抛出后,a方法中断

3b方法调用a方法获取到了a方法的异常,抛出后中断执行

4main方法获取到b方法抛出的异常捕捉后,继续往后执行,不中断

 

3、抛出异常处理机制:throw(注意是没有s的)抛出异常对象

定义的格式:

public void test() throws 异常对象类型{ try{ //存在异常的代码块 }catch(异常类型 变量名){ throw 异常对象; } }

 

throw异常对象注意:

a) throw一般存在于catch语句当中,用于出现异常后的一种操作方式

b) 捕捉的异常和抛出的异常不一定相同,可以不一样

c) throw抛出的异常对象如果是检测异常,则所在的方法必须要通过throws显性抛出

d) throw抛出的异常对象如果是非检测异常,则方法上可以选择性定义throws

 

六、自定义异常

自定义异常一般是自己定义一个类来扩展Exception

基本的定义格式:

public class 自定义异常类名 extends Exception{};

注意:自定义异常一般适用于throw代码块抛出

转载请注明原文地址: https://www.6miu.com/read-62785.html

最新回复(0)