1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。

import javax.swing.*;classAboutException {public static voidmain(String[] a) {int i=1, j=0, k;k=i/j;try{k= i/j;    //Causes division-by-zero exception//throw new Exception("Hello.Exception!");
}catch( ArithmeticException e){System.out.println("被0除.  "+e.getMessage());}catch(Exception e){if (e instanceofArithmeticException)System.out.println("被0除");else{  System.out.println(e.getMessage());}}finally{JOptionPane.showConfirmDialog(null,"OK");}}
}

其输出以下结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero
at ketangceshi.AboutException.main(AboutException.java:9)

有关异常处理的知识:

处理机制:吧可能发生错误的代码放入try语句块中,当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误(catch语句块中的代码用于处理错误)。当异常发生时,程序控制流程由try语句块跳转到catch语句块。不管是否有异常发生,finally语句块中的语句始终保持被执行。如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

异常分类:Throwable类有两个直接子类: Exception:出现的问题是可以被捕获的; Error:系统错误,通常由JVM处理。 可捕获的异常又可以分为两类: (1)Check异常:直接派生自Exception的异常类,必须被捕获或再次声明抛出 (2)Runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象: throw new ArithmeticException(…);

上述情况出现的原因:异常处理有“多态”的特性。

异常多态特性

可以有多个catch语句块,每个代码块捕获一种异常。在某个try块后有两个不同的catch 块捕获两个相同类型的异常是语法错误。 使用catch语句,只能捕获Exception类及其子类的对象。因此,一个捕获Exception对象的catch语句块可以捕获所有“可捕获”的异常。 将catch(Exception e)放在别的catch块前面会使这些catch块都不执行,因此Java不会编译这个程序。

finally的功能

资源泄露:当一个资源不再被某应用程序使用,但此程序并未向系统声明不再使用此资源时发生这种情况 finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行。 注意:finally语句块中也可能发生异常,如果这种情况发生,先前的异常被放弃。

2.多层的异常捕获-1

public classCatchWho {public static voidmain(String[] args) {try{try{throw newArrayIndexOutOfBoundsException(); }catch(ArrayIndexOutOfBoundsException e) { System.out.println("ArrayIndexOutOfBoundsException" +  "/内层try-catch"); }throw newArithmeticException(); }catch(ArithmeticException e) { System.out.println("发生ArithmeticException"); }catch(ArrayIndexOutOfBoundsException e) { System.out.println("ArrayIndexOutOfBoundsException" + "/外层try-catch"); } }
}

运行结果如下:

3.多层的异常捕获-2

public classCatchWho2 {public static voidmain(String[] args) {try{try{throw newArrayIndexOutOfBoundsException(); }catch(ArithmeticException e) { System.out.println("ArrayIndexOutOfBoundsException" + "/内层try-catch"); }throw newArithmeticException(); }catch(ArithmeticException e) { System.out.println("发生ArithmeticException"); }catch(ArrayIndexOutOfBoundsException e) { System.out.println("ArrayIndexOutOfBoundsException" + "/外层try-catch"); } }
}

运行结果如下:

4.动手动脑:当有多个嵌套的try...catch...finally时,要特别注意finally的执行时机。

public classEmbededFinally {public static voidmain(String args[]) {intresult;try{System.out.println("in Level 1");try{System.out.println("in Level 2");//result=100/0;//Level 2try{System.out.println("in Level 3");result=100/0;  //Level 3
}catch(Exception e) {System.out.println("Level 3:" +e.getClass().toString());}finally{System.out.println("In Level 3 finally");}//result=100/0;//Level 2
}catch(Exception e) {System.out.println("Level 2:" +e.getClass().toString());}finally{System.out.println("In Level 2 finally");}//result = 100 / 0;//level 1
}catch(Exception e) {System.out.println("Level 1:" +e.getClass().toString());}finally{.             System.out.println("In Level 1 finally");}}}

运行结果如下:

当有多层嵌套的finally时,异常在不同的层次抛出,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

5.finally语句块一定会执行吗?

public classSystemExitAndFinally {public static voidmain(String[] args){try{System.out.println("in main");throw new Exception("Exception is thrown in main");//System.exit(0);
}catch(Exception e){System.out.println(e.getMessage());System.exit(0);}finally{System.out.println("in finally");}}}

运行结果如下:

由运行结果分析得,finally语句块中得内容不一定会执行。

6.如何跟踪异常的传播路径?

//UsingExceptions.java//Demonstrating the getMessage and printStackTrace//methods inherited into all exception classes.
public classPrintExceptionStack {public static voidmain( String args[] ){try{method1();}catch( Exception e ) {System.err.println( e.getMessage()+ "\n");e.printStackTrace();}}public static void method1() throwsException{method2();}public static void method2() throwsException{method3();}public static void method3() throwsException{throw new Exception( "Exception thrown in method3");}
}

运行结果如下:

当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序。 可使用printStackTrace 和 getMessage方法了解异常发生的情况: printStackTrace:打印方法调用堆栈。 每个Throwable类的对象都有一个getMessage方法,它返回一个字串,这个字串是在Exception构造函数中传入的,通常让这一字串包含特定异常的相关信息。

转载于:https://www.cnblogs.com/Qi77/p/9941241.html

04-异常处理-动手动脑相关推荐

  1. java课程课后作业04之动手动脑

    1.继承条件下的构造方法调用 先贴出实验需要的代码: 1 package TestJava; 2 3 class Grandparent 4 { 5 public Grandparent() 6 { ...

  2. JAVA课上动手动脑问题以及课后测试1,2总结

    课堂测试1      像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 "软件" 2    (1)题目避免重复 (2)可定制(数量/打印方式) 设计思路 1)产生两 ...

  3. JAVA语法基础 动手动脑及课后作业

    动手动脑1: 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] ar ...

  4. 动手动脑-Java重载

    有以下例子: 例: Using overloaded methods public class MethodOverload { public static void main(String[] ar ...

  5. 04_类与对象_课程动手动脑问题以及课后实验性问题及解答集锦

    Answer: 动手动脑: 1--以下代码为何无法通过编译?哪儿出错了? Answer: 因为类Foo的构造函数是有一个参数的,所以我们在new一个Foo类的对象时必须赋予一个符合条件的实参. 2-- ...

  6. 动手动脑及课后实践3

    1.    动手动脑1: (一)运行结果: 分析原因:在Java中,内容相同的字串常量("Hello")只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象. 编译器 ...

  7. 第三次实验及动手动脑

    //第一个动手动脑 package 动手动脑3;public class ClassAndObjectTest {public static void main(String[] args) {//创 ...

  8. Java之动手动脑(三)

    日期:2018.10.12 星期五 博客期:017 这次留了两个动手动脑作业!我需要一个一个来说!先说第一个吧! Part 1 :随机生成1000个随机数 代码: 1 //以下为 RandomMake ...

  9. 第二次作业动手动脑的解答

    第一个动手动脑让我看老师发 的文件,EnumTest.java.猜它 的运行结果. 我猜嘛,s和 t肯定引用的不同对象,老师上课也讲过是吧. falsefalsetrueSMALLMEDIUMLARG ...

最新文章

  1. 实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现
  2. 用VirtualBox在XP环境下虚拟Ubuntu的过程
  3. python比java简单好学-是不是Python比Java更容易学,更容易就业?
  4. python输入一个列表的语句_python自学笔记使用if语句处理列表作业
  5. 物联网初步之电阻性电路分析 第三部分 电路分析方法和电路原理
  6. life game c语言,c++生命游戏源码
  7. TensorFlow HOWTO 4.2 多层感知机回归(时间序列)
  8. 【转】java中的Map集合
  9. Windows远程桌面连接Ubuntu 16.04
  10. 求生之路CN服务器无限火力,[04.26 for DLC]教你架设更加高级的对战服务器(高级难度+BOTs)...
  11. 泛微云桥e-birdge之金蝶云之家集成配置手册
  12. Python画一个中国地图玩玩
  13. mysql - rank函数的使用
  14. Spark Transformation —— subtract
  15. 《吃透MQ系列,图灵学院和咕泡学院
  16. ue4设置图片大小_如何达成照片级渲染效果,UE4来助你一臂之力
  17. 游戏安全反外挂-驱动的认识
  18. 程序员玩‘附近的人’,妹子还没泡,先学会了个专业技能!
  19. Python----数据分析-使用scikit-learn构建模型实训(wine数据集、wine_quality数据)
  20. 2021年吉林艺术高考成绩查询,2021年吉林艺术学院高考录取结果什么时候出来及查询系统入口...

热门文章

  1. Java jni 底层_Java中的native是如何实现的(JNI)
  2. c语言编译器怎么用scanfkl,C语言一些笔记
  3. 一段js面向对象的写法
  4. MyListUtil.java list工具类
  5. 未发现数据源名称_在Power BI中管理数据源Analysis Services
  6. 【算法与数据结构】堆排序是什么鬼?
  7. Java学习小程序(6)随机加法运算器
  8. 建立简单的服务器端程序
  9. TasksetManager冲突导致SparkContext异常关闭
  10. 聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁