1.请阅读并运行AboutException.java示例。

  1. import javax.swing.*;
  2.  
  3. class AboutException {
  4. public static void main(String[] a)
  5. {
  6. int i=1, j=0, k;
  7. k=i/j;
  8.  
  9. try
  10. {
  11.  
  12. k = i/j; // Causes division-by-zero exception
  13. //throw new Exception("Hello.Exception!");
  14. }
  15.  
  16. catch ( ArithmeticException e)
  17. {
  18. System.out.println("被0除. "+ e.getMessage());
  19. }
  20.  
  21. catch (Exception e)
  22. {
  23. if (e instanceof ArithmeticException)
  24. System.out.println("被0除");
  25. else
  26. {
  27. System.out.println(e.getMessage());
  28.  
  29. }
  30. }
  31.  
  32. finally
  33. {
  34. JOptionPane.showConfirmDialog(null,"OK");
  35. }
  36.  
  37. }
  38. }

运行结果:

2.多层的异常捕获-1

阅读以下代码(CatchWho.java),写出程序运行结果。

  1. public class CatchWho {
  2. public static void main(String[] args) {
  3. try {
  4. try {
  5. throw new ArrayIndexOutOfBoundsException();
  6. }
  7. catch(ArrayIndexOutOfBoundsException e) {
  8. System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
  9. }
  10.  
  11. throw new ArithmeticException();
  12. }
  13. catch(ArithmeticException e) {
  14. System.out.println("发生ArithmeticException");
  15. }
  16. catch(ArrayIndexOutOfBoundsException e) {
  17. System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
  18. }
  19. }
  20. }

运行结果:

分析:程序运行到第五行时抛出ArrayIndexOutOfBoundsException();该异常被第16行的catch语句捕获,

多层的异常捕获-2

写出CatchWho2.java程序运行的结果

  1. public class CatchWho2 {
  2. public static void main(String[] args) {
  3. try {
  4. try {
  5. throw new ArrayIndexOutOfBoundsException();
  6. }
  7. catch(ArithmeticException e) {
  8. System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
  9. }
  10. throw new ArithmeticException();
  11. }
  12. catch(ArithmeticException e) {
  13. System.out.println("发生ArithmeticException");
  14. }
  15. catch(ArrayIndexOutOfBoundsException e) {
  16. System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
  17. }
  18. }
  19. }

运行结果:

分析:程序运行到第5行时抛出ArrayIndexOutOfBoundsException();该异常被第15行的catch语句捕获

总结:

(1).异常捕获时可以有多个catch语句块,每个代码块捕获一种异常。

(2).在某个try块后有两个不同的catch 块捕获两个相同类型的异常是语法错误。

(3).使用catch语句,只能捕获Exception类及其子类的对象。因此,一个捕获Exception对象的catch语句块可以捕获所有“可捕获”的异常。

(4).将catch(Exception e)放在别的catch块前面会使这些catch块都不执行,因此Java不会编译这个程序。

3.当有多个嵌套的try...catch....finally时,要特别注意finally的执行时机,请先阅读EmbedFinally.java示例,再运行它,观察其输出再进行总结。

  1. public class EmbededFinally {
  2.  
  3. public static void main(String args[]) {
  4.  
  5. int result;
  6.  
  7. try {
  8.  
  9. System.out.println("in Level 1");
  10.  
  11. try {
  12.  
  13. System.out.println("in Level 2");
  14. // result=100/0; //Level 2
  15.  
  16. try {
  17.  
  18. System.out.println("in Level 3");
  19.  
  20. result=100/0; //Level 3
  21.  
  22. }
  23.  
  24. catch (Exception e) {
  25.  
  26. System.out.println("Level 3:" + e.getClass().toString());
  27.  
  28. }
  29.  
  30. finally {
  31.  
  32. System.out.println("In Level 3 finally");
  33.  
  34. }
  35.  
  36. // result=100/0; //Level 2
  37.  
  38. }
  39.  
  40. catch (Exception e) {
  41.  
  42. System.out.println("Level 2:" + e.getClass().toString());
  43.  
  44. }
  45. finally {
  46.  
  47. System.out.println("In Level 2 finally");
  48.  
  49. }
  50.  
  51. // result = 100 / 0; //level 1
  52.  
  53. }
  54.  
  55. catch (Exception e) {
  56.  
  57. System.out.println("Level 1:" + e.getClass().toString());
  58.  
  59. }
  60.  
  61. finally {
  62.  
  63. System.out.println("In Level 1 finally");
  64.  
  65. }
  66.  
  67. }
  68.  
  69. }

结果:

特别注意:当有多层嵌套的finally时,异常在不同层次抛出,在不同的位置抛出,可能导致不同的finally语句执行顺序

4.finally语句块一定会执行吗?请通过SystemExitAndFinally.java示例程序回答上述问题。

  1. public class SystemExitAndFinally {
  2.  
  3. public static void main(String[] args)
  4. {
  5.  
  6. try{
  7.  
  8. System.out.println("in main");
  9.  
  10. throw new Exception("Exception is thrown in main");
  11.  
  12. //System.exit(0);
  13.  
  14. }
  15.  
  16. catch(Exception e)
  17.  
  18. {
  19.  
  20. System.out.println(e.getMessage());
  21.  
  22. System.exit(0);
  23.  
  24. }
  25.  
  26. finally
  27.  
  28. {
  29.  
  30. System.out.println("in finally");
  31.  
  32. }
  33.  
  34. }
  35.  
  36. }

结果:

分析总结:

(1)try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执行。这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。

(2)在try块|catch块中有System.exit(0);这样的语句。System.exit(0)是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。

Java课程作业之动手动脑(五)的更多相关文章

  1. Java课程作业之动手动脑(六)

    1.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件. import java.io.IOException; import java.nio.file ...

  2. Java课程作业之动手动脑(四)

    1.继承条件下的构造方法调用 class Grandparent { public Grandparent() { System.out.println("GrandParent Creat ...

  3. Java课程作业之动手动脑(三)

    1.以下代码为何无法通过编译?哪儿出错了? 在Foo类中已经有了一个Foo的含参构造方法,所以在定义Foo类对象时不能使用new Foo()方法.在Foo类中再写一个无参构造方法,就能编译了. 如果类 ...

  4. Java课程作业之动手动脑(二)

    纯随机数发生器 编写一个方法,使用以下算法生成指定数目(比如1000个)的随机整数. import java.util.Scanner; public class test { public stat ...

  5. java课堂作业3 动手动脑

    第一题 测试一下代码查看输出结果 public class InitializeBlockDemo { /** * @param args */ public static void main(Str ...

  6. JAVA方法03之动手动脑问题解决

    动手动脑1.当JAVA里定义的函数中去掉static后,怎么办?(如下程序,将square()函数的static去掉) public class SquareIntTest { public stat ...

  7. Java类和对象动手动脑

    动手动脑1 以下代码为何无法通过编译?哪儿出错了?

  8. Java文件与类动手动脑

    动手动脑1: 使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件. package classJava; import java.io.IOExcepti ...

  9. Java第一节课动手动脑

    在第一节课的动手动脑中,主要解决四则运算问题. 首先第一个是出30道四则运算题目,在100以内.这个问题需要控制随机数生成的范围和结果的范围在100以内就可以. 第一次改进是3点:一为避免重复,二为定 ...

随机推荐

  1. Qsys 设计流程---Qsys System Design Tutorial

    Qsys 设计流程 ---Qsys System Design Tutorial 1.Avalon-MM Pipeline Bridge Avalon-MM Pipeline Bridge在slave ...

  2. 超细讲解Django打造大型企业官网

    本文为知了课堂黄勇老师讲的<超细讲解Django打造大型企业官网>的笔记. 第一章 Django预热 1.创建virtualenv虚拟环境 2.URL组成部分详解 3.Django介绍 4 ...

  3. laravel5.5 excel的安装和使用

    在项目开发中 最常用的就是把数据导出成excel的文件报表了 然而新下的项目中啥也没有;没有excel的扩展 会报这个错误 然后你需要通过composer安装这个依赖 学习源头:https://www ...

  4. Java 中统计文件中出现单词的次数练习

    统计英文article.txt文件中出现hello这个单词的次数 这个是article.txt文件内容 { hello The Royal Navy is trying hello to play h ...

  5. 安装使用git

    阿斯蒂芬 http://www.cnblogs.com/alex3714/articles/5930846.html

  6. 测试教程网.unittest教程.7. 各种断言方法

    From: http://www.testclass.net/pyunit/assert/ 背景 unittest支持各种断言方法. 断言列表 官方文档 方法 检查点 assertEqual(a, b ...

  7. 【Java】Java初始化过程总结

    概述 Java字节代码:byte[] Java类在JVM的表现形式:Class类的对象: Java源代码被编译成class字节码 : Java字节代码 --> Class类的对象: 加载:把Ja ...

  8. [转][Oracle]常见报错及处理

    IIS 在安装 Oracle Client 后,需要命令行执行: iisreset 1.ORA-00257 参考自:https://jingyan.baidu.com/article/f71d6037 ...

  9. dialog--not attached to window manager

    该异常表示view没有添加到窗口管理器,通常是我们dismiss对话框的时候,activity已经不存在了,建议不要在非UI线程操作对话框. [解决方案]:常发生这类Exception的情形都是,有一 ...

  10. [UE4]InterpToMovement

    InterpToMovement:可以让Actor在规定时间内,在多个点之间循环移动. Duration:规定时间