JavaException 异常处理
Posted mindzone
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaException 异常处理相关的知识,希望对你有一定的参考价值。
在Java程序中,发生的不正常情况称为异常
-【逻辑错误和语法错误】不是异常!
- 分为 Error错误 和 Exception异常
- Error 是JVM无法解决的错误问题 例如内存溢出 StackOverFlow 和 OOM
- Exception一般处理意料之外的问题
例如 空指针 NullPointerException,数组越界 OutofIndexException,连接超时异常,读取不到异常
对于异常的处理,1终止程序运行,2在编写时,就设置存在异常的可能
编译时异常和运行时异常
编译时异常 Checked
运行时异常 UnChecked
两种处理机制 Try - Catch - Finally Throws - Throw
- 把编译期可能存在的异常交给运行期处理
// 程序执行过程种出现异常,在异常代码出生成对应异常类的异常对象并抛出 // 一旦异常对象抛出,程序运行终止 @Test public void exceptionTest1(){ try{ // 可能出现的异常的代码 }catch (Exception exception){ // 出现的异常匹配参数种的异常,进入catch代码块处理异常 // 处理异常的方式 exception.printStackTrace(); }finally { // 无论是否发生异常,最终必须执行的代码块 // 适用在最后必须执行的代码,比如释放资源 System.out.println("必须执行的代码!"); } // finally 除了在try中直接系统退出之外,一定会执行 // 如果try中出现了 return 结束方法,也要等finally执行完毕,再回到try执行return } @Test public void exceptionTest2(){ try{ }finally { // 可以不处理异常直接执行finally,但是不要这么用 } } @Test public void exceptionTest3(){ try{ // 可以分多个catch 逐一捕获异常 }catch (NullPointerException nullPointerException){ nullPointerException.printStackTrace(); }catch (ArrayIndexOutOfBoundsException arrayIndexOutOfBoundsException){ arrayIndexOutOfBoundsException.printStackTrace(); }catch (ArithmeticException arithmeticException){ arithmeticException.printStackTrace(); }catch (Exception exception){ // 当所有异常都没有捕获到时,最后交给总异常处理 exception.printStackTrace(); } // 不要一开始最头上就写总异常捕获,总异常直接捕获处理后,下面的详细异常捕获不到,写了白写 }
- 向上继续抛出
// 如果我们不用try - catch - finally 进行处理,可以直接抛出异常 // throws + 对应的异常类型 ,声明这个方法可能发生的异常,如果发生异常,把异常向上抛出 // 本质上说,throws 并没有解决异常,只是把异常丢给放法的调用者解决,调用者可以自行try - catch 也可以继续向上抛出 // 方法出现异常时,在异常代码处生成异常对象,如果此异常符合throws所包含的异常类型时,异常对象抛出 public void throwsMethod() throws Exception{ }
使用场景:
- 父类中被重写的方法没有throws抛出异常,子类也不能使用throws,如果子类重写的方法发生异常必须try-catch处理
- 方法a中调用了其他多个方法,是一种递进关系,被调用的方法应该声明throws抛出,统一在方法a中try-catch处理
- THROW 手动创建异常并抛出异常
void throwException(int age) throws Exception { if (0 < age || age > 100) throw new Exception("不合理的年龄"); }
自定义异常类
/* 编译时异常 Exception 运行期异常 RuntimeException */ // 自定义异常需要继承异常类 public class WTF_Exception extends Exception{ // 未知的常量ID static final long serialVersionUID = -3387516993124229948L; public WTF_Exception(){ } public WTF_Exception(String message){ super(message); } }
序列化UID 保存记录标识值?
https://blog.csdn.net/seabreezesuper/article/details/70141844
以上是关于JavaException 异常处理的主要内容,如果未能解决你的问题,请参考以下文章
蓝牙连接错误:“jnius.jnius.JavaException:发生 JVM 异常:读取失败,套接字可能关闭或超时,读取 ret:-1”
PCL异常处理:pcl 1.8.13rdpartyoostincludeoost-1_64oost ypeofmsvc ypeof_impl.hpp(125): error(代码片段