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

(1)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)在java中捕获异常的语句为:

Try{
       //可能发生运行错误的代码;
  }
  catch(异常类型     异常对象引用){
          //用于处理异常的代码
  }
  finally{
         //用于“善后” 的代码
  }

(3)使用Java异常处理机制

当异常发生时,程序控制流程由try语句块跳转到catch语句块;
不管是否有异常发生,finally语句块中的语句始终保证被执行;
如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

(4)Java中的异常分类

Throwable类有两个直接子类:
Exception:出现的问题是可以被捕获的;
Error:系统错误,通常由JVM处理。

捕获的异常又可以分为两类:
(1)Check异常:直接派生自Exception的异常类,必须被捕获或再次声明抛出
(2)Runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象:

3.可以使用javap去反汇编两个示例程序的.class文件(一个是AboutException.class,另一个是ThrowDemo.class),从中你会有所发现的。

JVM在具体实现这两个指令时,采用了不同的处理策略,导致两段代码运行时得到不同的结果。

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

5.请先阅读 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");
        }
   }
 }

原因:当有多个嵌套的try…catch…finally时,异常在不同位置被接受,可能会导致异常下面的finally语句块执行顺序。不管是否有异常发生,finally语句块中的语句始终保证被执行。

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

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");
       
  }
   
 }

}

不会,System.exit(0)可以终止程序。

6.依据对本讲多个示例程序的分析,请自行归纳总结出Java多层嵌套异常处理的基本流程。

基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行。

7.编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。

import java.io.*;
import java.util.Scanner;
public class Score {

public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String grade,scor;
        double score;
        try {
           System.out.println("请输入你的成绩");
           scor=scanner.next();
            score=Double.parseDouble(scor);
         assert score>=0 &&score<=100:"输入的成绩必须是0到100之间";
    
           if(score<60) {
            grade="不及格";
           }
           else if(score<70) {
            grade="及格";
           }
           else if(score<85) {
            grade="中";
           }
           else if(score<90) {
            grade="良";
           }
           else {
            grade="优";
           }
           System.out.println("等级为"+grade); 
        } catch(NumberFormatException e) {
            System.out.println("输入必须为数字");
        }
 }

}

结果截图:

(1)输入0到100内的整数

(2)输入0到100内的小数

(3)输入不是数字的其他字符

(4)输入负数

(5)输入大于100的数

java课后思考问题(八)的更多相关文章

  1. java课后思考问题(一)

    1.一个Java类文件中真的只能有一个共有类吗? 一个Java类文件中只能有一个公有类 2.请使用Eclipse或javac检测一下以下代码,有错吗? 在Java中,可以将一个类定义在另一个类里面或者 ...

  2. java课后思考问题(二)

    1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. import java.math.BigInteger; public class Suijishu public stati ...

  3. java课后思考问题(七)

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

  4. # 20155337 2016-2017-2 《Java程序设计》第八周学习总结

    20155337 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第14章 NIO与NIO2 NIO简介 NIO使用频道来衔接数据结点,在处理数据时,NIO可 ...

  5. 20155319 2016-2017-2 《Java程序设计》第八周学习总结

    20155319 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 NIO与NIO2 - NIO使用频道(channel)来衔接数据节点 - read()将Re ...

  6. 20155312 2016-2017-2 《Java程序设计》第八周学习总结

    20155312 2016-2017-2 <Java程序设计>第八周学习总结 课堂内容总结 学习模式 游乐园模式-荒野求生模式 学习方法 以代码为中心->遇到不会的类和方法(参数等) ...

  7. 20155216 2016-2017-2 《Java程序设计》第八周学习总结

    20155216 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 认识NIO Java NIO 由以下几个核心部分组成: Channels Buffers S ...

  8. 20155227 2016-2017-2 《Java程序设计》第八周学习总结

    20155227 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 NIO与NIO2 NIO即New IO.java从JDK1.4开始提供了NIO,在JAVA ...

  9. 20155306 2016-2017-2 《Java程序设计》第八周学习总结

    20155306 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第十五章 通用API 15.1 日志 java.util.loggging包提供了日志功能相 ...

随机推荐

  1. Workerman安装流程

    第一步检测安装环境 curl -Ss http://www.workerman.net/check.php | php 操作结果显示 报错了  需要找到php.ini文件 解决办法如下: 打开 php ...

  2. PHP 流程控制

    流程控制 if, else, elseif $a = 5; $b = 9; if ($a > $b): echo "a is bigger than b"; elseif ( ...

  3. 基于OpenCV的面部交换

    需要装python库 OpenCV dlib docopt(根据打开方式选择是否装) # -*- coding: UTF-8 #本电脑试运行 命令 python F:\python_project\s ...

  4. javaCV入门指南:调用FFmpeg原生API和JavaCV是如何封装了FFmpeg的音视频操作?

    通过"javaCV入门指南:序章 "大家知道了处理音视频流媒体的前置基本知识,基本知识包含了像素格式.编解码格式.封装格式.网络协议以及一些音视频专业名词,专业名词不会赘述,自行搜 ...

  5. HL7 ADT Message Sample

    http://pixpdqtests.nist.gov:8080/#tests%2Fdriver%2Fversion.htm 可以打开上述连接, 选中version和actor, 然后获取对于samp ...

  6. DataGridColum的bug

    Datagrid有多个bug: 1,不支持DynamicResource的东西 2, 在Column隐藏后再显示, ColumnHeader的Tag或者DataContext为null. 解决办法: ...

  7. Jenkins安装配置简单使用

    安装启动是十分简单的,直接去https://jenkins.io/download/下载对应的rpm包就好了,需要注意的是我们的机器上要提前有java环境,相对应要选择你java环境可以支持的jenk ...

  8. Object中的方法

    1.equals() 2.toString() package com_package1; public class Person44 { private int age; public int ge ...

  9. 算法java实现--回溯法--图的m着色问题

    (转自:http://blog.csdn.net/lican19911221/article/details/26264471) 图的m着色问题的Java实现(回溯法) 具体问题描述以及C/C++实现 ...

  10. Python中的数据结构和算法

    一.算法 1.算法的时间复杂度 大 O 记法,是描述算法复杂度的符号O(1) 常数复杂度,最快速的算法. 取数组第 1000000 个元素 字典和集合的存取都是 O(1) 数组的存取是 O(1) O( ...