公司为什么要建立网站,网站上线步骤 icp备案,网页设计与制作模板图,上海市装修公司7.Java异常知识总结#xff08;声明、抛出、捕获异常#xff09;
7.1异常定义
在程序运行过程中#xff0c;如果JVM检测出一个不可能执行的操作时#xff0c;就会出现运行时错误#xff08;runtime error#xff09;。在Java中#xff0c;运行时错误会作为异常抛出。异…
7.Java异常知识总结声明、抛出、捕获异常
7.1异常定义
在程序运行过程中如果JVM检测出一个不可能执行的操作时就会出现运行时错误runtime error。在Java中运行时错误会作为异常抛出。异常就是一种对象表示阻止正常进行程序执行的错误或情况。如果异常没有被处理那么程序将会非正常终止。
7.2异常类继承层次与错误区分
异常是对象异常封装成类Exception,所有的异常都直接或间接继承自Throwable类。Throwable类有两个直接的子类Error和Exception。 可以通过继承Exception或Exception的子类来创建自己的异常类。Exception是程序可以恢复的异常。如除零异常、空指针访问、网络连接中断、读取不存在的文件等。Exception类分为受检查异常和运行时异常 受检查异常必检异常是除RuntimeException以外的异常特点是编译器会强制程序员检查并通过try-catch块处理它们或在方法头进行声明。如处理数据库异常的SQLException,处理读写异常的IOException运行时异常免检异常是继承RuntimeExceptionl类的直接或间接类。编译器不检查这类异常是否进行了处理也就是对于这类异常不捕获也不抛出程序也可以编译通过。一旦运行时异常时就会导致程序的终止。如访问一个数组的越界元素会抛出一个IndexOutofBoundsException异常。 7.3异常的处理模型
Java的异常处理模型基于三种操作
声明一个异常抛出一个异常或者捕获一个异常。 7.3.1抛出异常throws
1throws关键字 throws通常在方法首部的声明后抛出异常。 throws抛出的是可能发生的异常。并不一定会发生这些异常 当该方法被调用的时候必须捕获或者也可以再次抛出异常最终由Java虚拟机处理。 用来声明一个方法可能产生的所有异常用分隔 不做任何处理而是将异常往上传谁调用我我就抛给谁。 举例 class MyAnimation{ public Image loadImage(String s) throws IOException{...}
}2throw关键字 throw关键字通常用在方法体中并且抛出一个异常对象。 throw则是抛出了异常执行throw则一定抛出了某种异常 只能抛出一个异常对象 有两种方式捕获。要么自己捕获异常 try-catch 代码块要么是抛出一个异常throws 异常 举例 String readData(Scanner in)throws EOFException{ while(...){ if(!in.hasNext())//遇到EOFException异常 if(nlen){ throw new EOFException(); }... }
}3小结
throw抛出一个异常对象时需要由函数的上层调用处理这个异常此时可以通过try-catchfinally代码块,也可以通过throws进行抛出。一定要处理throws抛出一个可能的异常时可以不对此异常进行处理。
7.3.2 捕获异常try-catch-finally
1try-catch-finally语句
try{//需要被检测的异常代码
}catch(Exception e){//异常处理,即处理异常的代码打印异常信息并处理
}finally{//一定会被执行的代码通常可以进行资源的清除工作
}2try-catch语句
try{//需要被检测的异常代码
}catch(Exception e){//异常处理,即处理异常的代码打印异常信息并处理
}3try-finally语句
try{//需要被检测的异常代码
}finally{//一定会被执行的代码通常可以进行资源的清除工作
}4多catch语句
try{//需要被检测的异常代码
}catch(Exception e1){//异常处理,即处理异常的代码打印异常信息并处理
}catch(IOException e2){//异常处理,即处理异常的代码打印异常信息并处理
} //可以通过catch处理多个异常。
7.3.3举例
public class TestException {//测试0boolean testEx() throws Exception{boolean res true;try{res testEx1();//执行}catch (Exception e){System.out.println(测试0,捕获异常);res false;throw e;}finally{System.out.println(测试0, finally 最终返回的值 res);return res;}}//测试1boolean testEx1() throws Exception{boolean res true;try{res testEx2();if (!res){return false;}return res;}catch (Exception e){System.out.println(测试1, catch捕获);res false;throw e;}finally{System.out.println(测试1, finally最终返回值 res);return res;}}//测试2boolean testEx2() throws Exception{boolean res true;try{int b 2;int c;for (int i 2; i 0; i--){c b / i;System.out.println(cc\ti i);}return true;}catch (Exception e){System.out.println(测试2, catch捕获);res false;throw e;}finally{System.out.println(测试2, finally最终值 res);return res;}}
}//借鉴Angel_Kitty的例子7.4自定义异常
7.4.1自定义异常类
class CustomException extends Exception {private String customMessage;public CustomException(String message) {super(message);this.customMessage message;}public String getCustomMessage() {return customMessage;}
}7.4.2测试类—并抛出自己的异常 class Example {public static void main(String[] args) {try {// 模拟条件触发自定义异常抛出int age -1;if (age 0) {throw new CustomException(年龄不能为负数);}} catch (CustomException e) {System.out.println(捕获到自定义异常 e.getCustomMessage());}}
}