Java课程作业之动手动脑(五)
1.请阅读并运行AboutException.java示例。
- import javax.swing.*;
- class AboutException {
- public static void main(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 instanceof ArithmeticException)
- System.out.println("被0除");
- else
- {
- System.out.println(e.getMessage());
- }
- }
- finally
- {
- JOptionPane.showConfirmDialog(null,"OK");
- }
- }
- }
运行结果:
2.多层的异常捕获-1
阅读以下代码(CatchWho.java),写出程序运行结果。
- public class CatchWho {
- public static void main(String[] args) {
- try {
- try {
- throw new ArrayIndexOutOfBoundsException();
- }
- catch(ArrayIndexOutOfBoundsException e) {
- System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
- }
- throw new ArithmeticException();
- }
- catch(ArithmeticException e) {
- System.out.println("发生ArithmeticException");
- }
- catch(ArrayIndexOutOfBoundsException e) {
- System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
- }
- }
- }
运行结果:
分析:程序运行到第五行时抛出ArrayIndexOutOfBoundsException();该异常被第16行的catch语句捕获,
多层的异常捕获-2
写出CatchWho2.java程序运行的结果
- public class CatchWho2 {
- public static void main(String[] args) {
- try {
- try {
- throw new ArrayIndexOutOfBoundsException();
- }
- catch(ArithmeticException e) {
- System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
- }
- throw new ArithmeticException();
- }
- catch(ArithmeticException e) {
- System.out.println("发生ArithmeticException");
- }
- catch(ArrayIndexOutOfBoundsException e) {
- System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
- }
- }
- }
运行结果:
分析:程序运行到第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示例,再运行它,观察其输出再进行总结。
- public class EmbededFinally {
- public static void main(String args[]) {
- int result;
- try {
- System.out.println("in Level 1");
- try {
- System.out.println("in Level 2");
- // result=100/0; //Level 2
- try {
- 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语句执行顺序
4.finally语句块一定会执行吗?请通过SystemExitAndFinally.java示例程序回答上述问题。
- public class SystemExitAndFinally {
- public static void main(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");
- }
- }
- }
结果:
分析总结:
(1)try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执行。这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。
(2)在try块|catch块中有System.exit(0);这样的语句。System.exit(0)是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。
Java课程作业之动手动脑(五)的更多相关文章
- Java课程作业之动手动脑(六)
1.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件. import java.io.IOException; import java.nio.file ...
- Java课程作业之动手动脑(四)
1.继承条件下的构造方法调用 class Grandparent { public Grandparent() { System.out.println("GrandParent Creat ...
- Java课程作业之动手动脑(三)
1.以下代码为何无法通过编译?哪儿出错了? 在Foo类中已经有了一个Foo的含参构造方法,所以在定义Foo类对象时不能使用new Foo()方法.在Foo类中再写一个无参构造方法,就能编译了. 如果类 ...
- Java课程作业之动手动脑(二)
纯随机数发生器 编写一个方法,使用以下算法生成指定数目(比如1000个)的随机整数. import java.util.Scanner; public class test { public stat ...
- java课堂作业3 动手动脑
第一题 测试一下代码查看输出结果 public class InitializeBlockDemo { /** * @param args */ public static void main(Str ...
- JAVA方法03之动手动脑问题解决
动手动脑1.当JAVA里定义的函数中去掉static后,怎么办?(如下程序,将square()函数的static去掉) public class SquareIntTest { public stat ...
- Java类和对象动手动脑
动手动脑1 以下代码为何无法通过编译?哪儿出错了?
- Java文件与类动手动脑
动手动脑1: 使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件. package classJava; import java.io.IOExcepti ...
- Java第一节课动手动脑
在第一节课的动手动脑中,主要解决四则运算问题. 首先第一个是出30道四则运算题目,在100以内.这个问题需要控制随机数生成的范围和结果的范围在100以内就可以. 第一次改进是3点:一为避免重复,二为定 ...
随机推荐
- Qsys 设计流程---Qsys System Design Tutorial
Qsys 设计流程 ---Qsys System Design Tutorial 1.Avalon-MM Pipeline Bridge Avalon-MM Pipeline Bridge在slave ...
- 超细讲解Django打造大型企业官网
本文为知了课堂黄勇老师讲的<超细讲解Django打造大型企业官网>的笔记. 第一章 Django预热 1.创建virtualenv虚拟环境 2.URL组成部分详解 3.Django介绍 4 ...
- laravel5.5 excel的安装和使用
在项目开发中 最常用的就是把数据导出成excel的文件报表了 然而新下的项目中啥也没有;没有excel的扩展 会报这个错误 然后你需要通过composer安装这个依赖 学习源头:https://www ...
- Java 中统计文件中出现单词的次数练习
统计英文article.txt文件中出现hello这个单词的次数 这个是article.txt文件内容 { hello The Royal Navy is trying hello to play h ...
- 安装使用git
阿斯蒂芬 http://www.cnblogs.com/alex3714/articles/5930846.html
- 测试教程网.unittest教程.7. 各种断言方法
From: http://www.testclass.net/pyunit/assert/ 背景 unittest支持各种断言方法. 断言列表 官方文档 方法 检查点 assertEqual(a, b ...
- 【Java】Java初始化过程总结
概述 Java字节代码:byte[] Java类在JVM的表现形式:Class类的对象: Java源代码被编译成class字节码 : Java字节代码 --> Class类的对象: 加载:把Ja ...
- [转][Oracle]常见报错及处理
IIS 在安装 Oracle Client 后,需要命令行执行: iisreset 1.ORA-00257 参考自:https://jingyan.baidu.com/article/f71d6037 ...
- dialog--not attached to window manager
该异常表示view没有添加到窗口管理器,通常是我们dismiss对话框的时候,activity已经不存在了,建议不要在非UI线程操作对话框. [解决方案]:常发生这类Exception的情形都是,有一 ...
- [UE4]InterpToMovement
InterpToMovement:可以让Actor在规定时间内,在多个点之间循环移动. Duration:规定时间