JAVA异常及其处理

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代码块抛出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值