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. 使用top命令查看系统状态

    Linux系统可以通过top命令查看系统的CPU.内存.运行时间.交换分区.执行的线程等信息.通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高? 使用SSH ...

  2. 剑指offer24:判断一个二叉树的后序遍历序列是否为二叉搜索树的后序遍历序列

    public static boolean isBSTSequence(int[] s,int l, int r) { if (s == null || r <= 0) return false ...

  3. linux 进程学习笔记-进程调度

    在分时系统中,系统将CPU时间划分成无数个时间片(quantum)分配给不同的进程,一个时间片只执行一个进程,并且不停地切换,以让用户感觉到各个进程是在“同时运行”,这中间所需要的策略和算法便是进程调 ...

  4. 机器学习:simple linear iterative clustering (SLIC) 算法

    图像分割是图像处理,计算机视觉领域里非常基础,非常重要的一个应用.今天介绍一种高效的分割算法,即 simple linear iterative clustering (SLIC) 算法,顾名思义,这 ...

  5. 【Shell】Linux 一行 多命令

    http://www.cnblogs.com/koreaseal/archive/2012/05/28/2522178.html 要实现在一行执行多条Linux命令,分三种情况: 1.&&am ...

  6. ogg日常运维命令

    1.查看历史记录.快捷执行历史中的一条命令 GGSCI (11g) 32> h 23: view param exta24: info all25: lag exta.... GGSCI (11 ...

  7. bzoj 3680(洛谷1337) 吊打XXX——模拟退火

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3680 https://www.luogu.org/problemnew/show/P1337 ...

  8. jdk、tomcat如何配置环境变量

    一.安装JDK和Tomcat 1,安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可. 备注:路径可以其他盘符,不建议路径包含中文名及特殊符号. 2.安装Tomc ...

  9. Day06:迭代器,生成器,生成表达式,面向过程编程,包及常用模块

    今日内容:1.迭代器(****)2.生成器(***)3.生成器表达式(*****)4.面向过程编程(*****)5.包的使用(***)6.常用模块    logging (*****)    re ( ...

  10. XCode工程中 Project 和 Targets区别

    转自:http://blog.csdn.net/zhaozy55555/article/details/8557175 project就是一个项目,或者说工程,一个project可以对应多个targe ...