Exception

Exception
 

异常分为两种
	一:典型的错误Error
		方法递归调用发生的StackOverflowError和不断在堆中创建对象出现的OutOfMemoryError
	二:就是现在准备提起的Exception异常,前者Error往往是严重错误无法挽救,而Exception在采取措施后让程序恢复正常
		两者均继承自Throwable

 

 

异常处理方法

积极处理:

方式一

 

    try {
      // 有可能出现异常的代码
 	} catch( 异常类型 ) {
      // 捕获异常后的代码
    }finally{
            释放资源;	
    }

 

注意事项:
	try中代码越少越好
	catch中尽可能都做处理

方式二:

 

        try {
 				可能出现问题的代码 ; 
        }catch(异常名1 变量名1){
  				对异常的处理方式 ;
 		}catch (异常名2 变量名2){
 				对异常的处理方式 ;
 		}finally{
                释放资源;
        }

 

注意事项:
	1:能明确的尽量明确,不要用大的来处理。
	2:如果出现了子父关系,父必须在后面。

方式三:

 

try {
  			可能出现问题的代码 ;
  		}catch(异常名1 | 异常名2 | ....   变量名){
  			对异常的处理方案 ;
  		}

  

注意事项:
	1.异常之间只能是平级关系
	2.处理方式一致

消极处理

在方法声明处添加throws抛出异常,将异常抛给方法调用者处理,当最终异常传给main方法时,异常传到jvm,程序运行结束

分类:

 

未检查异常(uncheck) :
	RuntimeException或它的子类
	Error和它的子类	
	
 检查异常(check) :
	Throwable
	Exception以及他们的子类
     检查异常需要强制地配合try-catch或throws一起使用	 

自定义异常:

	1)子类的重写方法,不能抛出比父类更多的异常(检查异常)
	2)子类的重写方法,可以不抛出异常
	3)尽可能将检查异常转换为未检查异常抛出

finally关键字

try {
     //可能出现问题的代码
  } catch(Exception e) {
   //对异常的处理方法
  } finally {
     // 无论出现异常与否,总会被执行的代码
     }

 

	注意:
		1)如果try,catch以及finally均出现return语句,以finally中的为准
		2)如果try有return,finally只是对返回的变量做修改,那么不影响return结果

	final,finally,finalize的区别:
		final:状态修饰符,用于修饰类,变量和方法
		finally:用于try...catch语句,用于释放资源
		finalize:Object类中的方法,用于回收垃圾
在Oracle数据库中,PL/SQL提供了强大的异常处理机制,用于捕获和处理运行时错误,使代码更健壮,能优雅处理意外情况,提高应用程序可靠性和用户体验 [^1]。 ### 异常处理方法 PL/SQL异常处理的基本结构包含三个部分:执行部分(BEGIN - END之间的代码)、异常处理部分(EXCEPTION块)和可选的声明部分(DECLARE块)。当执行部分的代码出现异常时,控制权会转移到异常处理部分。示例代码如下: ```plsql DECLARE -- 声明部分,可声明变量等 v_num NUMBER; BEGIN -- 执行部分 SELECT column_name INTO v_num FROM table_name WHERE condition; EXCEPTION -- 异常处理部分 WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('未找到数据'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('返回了多行数据'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('发生其他异常:' || SQLERRM); END; ``` 在这个例子中,`NO_DATA_FOUND`、`TOO_MANY_ROWS` 是预定义异常,`OTHERS` 用于捕获其他未明确指定的异常,`SQLERRM` 函数用于获取异常的错误信息。 ### 异常类型 - **预定义异常**:Oracle预定义了一些常见的异常,如 `NO_DATA_FOUND`(SELECT INTO语句未返回任何行)、`TOO_MANY_ROWS`(SELECT INTO语句返回多行)、`ZERO_DIVIDE`(除数为零)等。 - **非预定义异常**:对于一些没有预定义名称的Oracle错误,需要开发者自己将错误号与异常名称关联起来。示例如下: ```plsql DECLARE e_unique_violation EXCEPTION; PRAGMA EXCEPTION_INIT(e_unique_violation, -00001); -- -00001是唯一约束违反的错误号 BEGIN INSERT INTO table_name (column1, column2) VALUES (value1, value2); EXCEPTION WHEN e_unique_violation THEN DBMS_OUTPUT.PUT_LINE('违反唯一约束'); END; ``` - **自定义异常**:开发者可以根据业务需求自定义异常。示例如下: ```plsql DECLARE e_custom_exception EXCEPTION; v_age NUMBER := 15; BEGIN IF v_age < 18 THEN RAISE e_custom_exception; END IF; EXCEPTION WHEN e_custom_exception THEN DBMS_OUTPUT.PUT_LINE('年龄未满18岁'); END; ``` ### 异常传播 异常在嵌套块中会进行传播。当一个内部块中出现异常且该块没有对应的异常处理时,异常会传播到外部块进行处理。例如: ```plsql BEGIN BEGIN SELECT column_name INTO v_variable FROM table_name WHERE condition; EXCEPTION WHEN NO_DATA_FOUND THEN -- 内部块处理部分异常 DBMS_OUTPUT.PUT_LINE('内部块未找到数据'); END; EXCEPTION WHEN TOO_MANY_ROWS THEN -- 外部块处理其他异常 DBMS_OUTPUT.PUT_LINE('外部块返回多行数据'); END; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值