zoukankan      html  css  js  c++  java
  • 多态与异常处理课后作业

    (1)下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?
    m=d;
    d=m;
    d=(Dog)m;
    d=c;
    c=(Cat)m;
    回答:其中d=m出现错误是因为,基类赋值给子类必须进行强制类型转换;d=c出错是因为,子类之间不能赋值。
    (2)动手动脑:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识
    出现系统提示的除0错误。去掉try外侧的k=i/j代码,则提示catch住的错误。
    java异常处理机制:
    1.把可能会发生错误的代码放进try语句块中。
    2.当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。
    catch语句块中的代码用于处理错误。
    3.当异常发生时,程序控制流程由try语句块跳转到catch语句块。
    4.不管是否有异常发生,finally语句块中的语句始终保证被执行。
    5.如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。
     
    finally的功能:
    1.资源泄露:当一个资源不再被某应用程序使用,但此程序并未向系统声明不再使用此资源时发生这种情况
    2.finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行。
    3.注意:finally语句块中也可能发生异常,如果这种情况发生,先前的异常被放弃。
    (3)请先阅读EmbedFinally.java示例,再运行它,观察其输出并进行总结。
    当有多层嵌套的finally时,异常在不同的层次抛出,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。
    (4)辨析:finally语句块一定会执行吗?
    不会,因为遇见System.exit(0);会直接退出系统。
    (5)动手动脑
    import javax.swing.*;
    
    public class Test {
        public static void input()
        {
            while(true)
            {
                double i=0;
                String s=JOptionPane.showInputDialog("输入分数:");
                try
                {
                    i=Double.parseDouble(s);
                }
                catch(NumberFormatException e)
                {
                    JOptionPane.showMessageDialog(null,"输入错误","验证结果:",JOptionPane.PLAIN_MESSAGE );
                    input();
                }
                finally
                {
                    JOptionPane.showMessageDialog(null,"OK","验证结果:",JOptionPane.PLAIN_MESSAGE );
                }
                if(0<=i&&i<60)
                {
                    JOptionPane.showMessageDialog(null,"不及格","验证结果:",JOptionPane.PLAIN_MESSAGE );
                    System.exit(0);
                }
                else if(i>=60&&i<70)
                {
                    JOptionPane.showMessageDialog(null,"及格","验证结果:",JOptionPane.PLAIN_MESSAGE );
                    System.exit(0);
                }
                else if(i>=70&&i<80)
                {
                    JOptionPane.showMessageDialog(null,"良好","验证结果:",JOptionPane.PLAIN_MESSAGE );
                    System.exit(0);
                }
                else if(i>=80&&i<=100)
                {
                    JOptionPane.showMessageDialog(null,"优秀","验证结果:",JOptionPane.PLAIN_MESSAGE );
                    System.exit(0);
                }
                else
                {
                    JOptionPane.showMessageDialog(null,"超出范围","验证结果:",JOptionPane.PLAIN_MESSAGE );
                }
            }
        }
        public static void main(String[] args){
            input();
        }
    }

    设计思想:定义input函数,判断输入的类型,若正常则执行判断输出结果最后退出系统,若不正常则重复输入直至正常。

    程序流程图:

    运行结果:

  • 相关阅读:
    [ubuntu] aptget 详解
    zoj 1048 求平均数 python
    zoj 1001 A+B Python版本
    HustOj 数据库分析(r1292) [—夏 夏 ]
    poj 3020 Antenna Placement 夜
    poj 3349 Snowfalke Snow Snowflakes 夜
    poj 1062 昂贵的聘礼 夜
    poj 3368 Frequent values 夜
    poj 2524 Ubiquitous Religions 夜
    poj 1273 Drainage Ditches 夜
  • 原文地址:https://www.cnblogs.com/a1264393659/p/4966265.html
Copyright © 2011-2022 走看看