zoukankan      html  css  js  c++  java
  • 动手动脑-异常处理

    课后作业01-动手动脑

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

    结果截图:

    异常处理:Try{ //可能发生运行错误的代码;}

              catch(异常类型     异常对象引用){ //用于处理异常的代码;}

              finally{ //用于“善后” 的代码;}

    1)把可能会发生错误的代码放进try语句块中。

    2)当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。

    3)catch语句块中的代码用于处理错误。

    4)当异常发生时,程序控制流程由try语句块跳转到catch语句块。

    5)不管是否有异常发生,finally语句块中的语句始终保证被执行。

    如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

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

     

    运行结果截图:

     

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

     

    运行结果截图:

     

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

    答:不一定;finally不一定执行,当try从句或者catch()从句中有System.exit()语句时,finally()不会被执行。如果finally块中的代码过多会导致字节码条数”膨胀”,因为finally中的字节码会被”复制”到try块和所有的catch块中。

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

    一、Throwable类有两个直接子类:

    1、Exception:出现的问题是可以被捕获的;

    2、Error:系统错误,通常由JVM处理。

    可捕获的异常又可以分为两类:

    (1)check异常:直接派生自Exception的异常类,必须被捕获或再次声明抛出

    (2)runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象

    当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。当有多层嵌套的finally时,异常在不同的层次抛出,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

    二、try-catch-finally相互嵌套时,先处理最内层的try-catch-finally。当try抛出了与catch匹配的异常,则代码到相应的catch()中执行。如果catch也出现了异常,程序会检测finally中是否有异常,若有,则覆盖。如果只有try-finally,那么先执行finally,如果finally没有异常,则返回处理try中的异常,如果finally有异常,则覆盖try中的异常

    6、请看以下代码,它们完全符合Java语法规范,但事实是它们不能通过编译:为什么?

    public class TestThrows   {

           public static void main(String[] args)     {

              FileInputStream fis = new                      

                                                       FileInputStream("a.txt");

              }

       }

    答:程序本身没什么问题,但是main方法里面什么都没有写,没有输出任何结果。
    课后作业02-编写一个程序,此程序在运行时要求用户输入一个     整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。
    import java.util.*; 
    class AException extends Exception
    {
    String a;
    AException()  
    {
    a="输入有误";   
    }
    public String toString()
    {
    return a;
    }
    }
     class A 
        public static void main(String args[]) 
        { 
         while(1>0)
           {
         Scanner sc = new Scanner(System.in); 
         System.out.println("请输入考试成绩(0~100):"); 
           try 
            { 
                String s = sc.nextLine();     
                getnum(s); 
            } 
            catch (AException e) 
            { 
                System.out.println(e.toString()); 
            } 
           }
        } 
        private static void getnum(String s) throws AException 
        { 
         for (int i = s.length()-1; i >= 0;i--) 
            {
             int chr = s.charAt(i);
                if (chr < 48 || chr > 57)
                {
                 throw new AException(); 
                }
            }  
         double num = Double.parseDouble(s);   
            if (num < 0 || num> 100) 
            { 
                throw new AException(); 
            } 
            if (num>= 0 && num<= 60)
            { 
                System.out.print("不及格
    "); 
            } 
            else if (num >= 60 && num <= 70) 
            { 
                System.out.print("及格
    "); 
            } 
            else if (num>= 70 && num<= 80) 
            { 
                System.out.print("中
    "); 
            }
            else if (num >= 80 && num <= 90) 
            { 
                System.out.print("良
    "); 
            } 
            else 
            { 
                System.out.print("优
    "); 
            } 
        } 
    }

    运行结果截图:

     

  • 相关阅读:
    GPS坐标转百度地图并且加载地图示例.支持微信端访问
    关于vs2013 mysql Ef框架中提示版本不兼容问题的解决办法
    CSS3 关于@font-face引用中文字体解决办法
    登录权限,菜单动态加载,动态渲染功能按钮
    vue-router使用next()跳转到指定路径时会无限循环
    三张图较为好理解JavaScript的原型对象与原型链
    深入javascript之原型和原型链
    vue2.0引入现有css文件
    定制简单的404和403页面
    弹框内画echarts图dom元素无法获取的问题
  • 原文地址:https://www.cnblogs.com/yanghanyu981005/p/7846807.html
Copyright © 2011-2022 走看看