JAVA异常处理

本文详细介绍了Java中的异常处理机制,包括try-catch-finally的基本用法、异常抛出与捕获的原则、RuntimeException与非RuntimeException的区别及自定义异常的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA异常处理机制
1. 使用try{}catch(){}对可能出现异常的代码进行捕获

		int a=1;
		int b=0;
		try//放入可能会出现异常的代码,对其进行异常的捕获
		{
			double x=a/b;
			System.out.println("x="+x);
		}
		catch(Exception e)//当出现异常时执行的语句块
		{
			System.out.println("出现了异常");
			
		}
		finally//一定会执行的代码,一般用于数据库的关闭和资源的释放
		{
			
		}

有异常捕获的三种格式

(1). Try{}

Catch(){}

Finally{}

(2). Try{}

Catch(){}

Catch(){}

....

(3). Try{}
Finally{}


catch(){}的作用为处理异常,当try{}中有异常时,必须有catch(){}进行处理或者函数声明异常

Finally{}一定会执行的代码,一般用于数据库的关闭和资源的释放


两种思路
(1).最后不加catch(Exception e){},声明具体的异常,这样处理可以更具体并一定会发现出现的异常并对其进行处理

(2).最后加catch(Exception e){},处理未知的异常,但会隐藏某些异常,使程序发生无法想象的错误

若要加catch(Exception e){}则必须作为最后的catch(){},由于所有的异常类为Exception的子类,若将catch(Exception e){}放前

则异常发生时均会执行catch(Exception e){} 中的语句块

每次异常出现时只能处理一个异常(当发生异常时直接跳出执行相应的catch(){}中的语句块)


2. 在对可能发生异常的方法进行异常的抛出(抛出的异常会交给调用此方法的类处理,当方法调用有异常抛出的方法时,一定要对其进行try{}catch{}捕获或者将异常抛出,当一直抛给上一级时,最终会由java虚拟机处理,调用相应异常的方法显示异常信息)

class Demo1
{
    int div(int a,int b)throws Exception//通过throws的关键字声明此方法可能会出现异常
    {
       if(b==0)
           throw new Exception();//抛出异常
       else
       return a/b;
    }
}

throws与throw的区别

1.  throws在函数上声明,throw在函数内声明

2.  throws后面跟异常类,可多个,用逗号分隔,throw后面跟异常对象


当函数内部出现抛出异常时,函数上必须声明抛出的异常(除了继承RuntimeException异常的类)


Exception 中有一个特殊的子类,RuntimeException(运行时异常)


RuntimeException(运行时异常)
表示代码本身存在BUG但只有运行操作后才会出现问题,而使程序不能运行,如果用try{}catch{}语句进行捕获时,并不能解决bug所带来的问题
如果在函数内抛出该类或该类的子类时,函数上可以不声明
如果函数上声明了该类或该类的子类时,调用时可以不对其进行捕获或抛出

自定义异常时,如果该异常发生时使程序无法继续运算时,则自定义异常类继承RuntimeException类

由于RuntimeException(运行时异常)会使程序无法运行,因此不对其进行处理,使程序直接直接显示异常,程序员则在相应地方进行修改


非RuntimeException(编译时异常)
在编译过程中被检测到的异常,要用try{}catch{}捕获或将异常抛出

自定义异常:对程序中可能出现的问题进行封装

定义类继承Exception或RuntimeException

1.      让自定义类具备可抛性

2.      让该类操作异常的共性方法

 

当要自定义异常类时,可使用父类的功能

异常信息传递给父类的构造函数


Class MyException extends Exception
{
	MyException(String Message)
	{
	Super(Message);//调用父类的构造函数
	}
}


异常在子类继承父类中的体现
1. 子类覆盖父类时,如果父类的方法抛出异常,子类则只能抛出父类的异常或该异常的子类
2. 如果父类的方法抛出过个异常时,则子类在覆盖方法时,只能抛出父类方法异常的子集
3. 如果子类方法有新的异常时,则只能用try{}catch{}语句进行捕获而不能讲异常抛出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值