动手动脑-异常处理

课后作业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("优
"); 
        } 
    } 
}

运行结果截图:

 

原文地址:https://www.cnblogs.com/yanghanyu981005/p/7846807.html