动手动脑之异常处理

1.阅读代码(CatchWho.java),写出程序运行结果

public class CatchWho {
    public static void main(String[] args) {
        try {
                try {
                    throw new ArrayIndexOutOfBoundsException();
                }
                catch(ArrayIndexOutOfBoundsException e) {
                       System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch");
                }

            throw new ArithmeticException();
        }
        catch(ArithmeticException e) {
            System.out.println("发生ArithmeticException");
        }
        catch(ArrayIndexOutOfBoundsException e) {
           System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch");
        }
    }
}

2.阅读代码(CatchWho2.java),写出程序运行结果

public class CatchWho2 {
    public static void main(String[] args) {
        try {
                try {
                    throw new ArrayIndexOutOfBoundsException();
                }
                catch(ArithmeticException e) {
                    System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
                }
            throw new ArithmeticException();
        }
        catch(ArithmeticException e) {
            System.out.println("发生ArithmeticException");
        }
        catch(ArrayIndexOutOfBoundsException e) {
            System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
        }
    }
}

3.阅读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语句块中的语句始终保证被执行。

4.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)可以终止程序,finally语句块一定会执行。

5.自行归纳Java多层嵌套异常处理的基本流程

在java语言中,通常将可能出现异常的语句放入try{}语句中,将出现错误后需要执行的语句放入到catch{}语句中,将无论是否发生异常都要执行的语句放在finally{}语句中。当程序执行出现异常的时候,系统会抛出一个异常,然后由try{}语句中中出现异常的地方转到catch{}语句中。不过不管有没有异常产生,finally{}中的语句都将执行。如果系统出现系统错误或者运行Runtime异常,jvm会结束程序运行,不一定会执行finally{}中的语句。如果try{}中产生的异常在catch中没有处理,系统将停止程序,也不会执行finally中的语句。

6.动手动脑,编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都不会崩溃。

import java.util.Scanner;
public class Test
{
    public static void main(String[] args)
    {
        Scanner input=new Scanner(System.in);
        System.out.println("请输入分数:");

        String score=input.nextLine();
        while(true)
        {
        try
        {
            for(int i=0;i<score.length();i++)
            {

                if(!(score.charAt(i)>=48&&score.charAt(i)<=57))
                {
                    throw new MyException();
                }
            }
            int m = Integer.parseInt(score);//把字符串转换成整型
            String str="";
            if(m<60)
            {
                str="不及格";
            }
            else if(m<70)
            {
                str="及格";
            }
            else if(m<80)
            {
                str="中";
            }
            else if(m<90)
            {
                str="良";
            }
            else if(m<=100)
            {
                str="优";
            }
            else if (m>100||m<0)
            {
                throw new MyException();
            }
            System.out.println("分数等级为:"+str);
            break;
        }
        catch(MyException A)
        {
             A.error();
        }

        }
    }
}
class  MyException extends Exception{

    public void error()
    {
            System.out.println("你输入的数字不符合要求");    

    }
}

时间: 2024-08-07 00:04:21

动手动脑之异常处理的相关文章

动手动脑(异常处理)

1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*; class AboutException { public static void main(String[] args) { float i=1, j=0, k; k=i/j; System.out.println(k); try { k = i/j;    // Causes division-by-zero exceptio

异常处理---动手动脑及课后作业

动手动脑1:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 源码: 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

java动手动脑异常处理

实验任务一:多层的异常捕获-1 1.实验内容:阅读(CatchWho.java),写出程序运行结果: public class CatchWho{ public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println(  "ArrayIndexOut

动手动脑之多态与异常处理

动手实验一:下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 先进行自我判断,得出结论后,运行TestCast.java实例代码,看看你的判断是否正确: java中基类对象不能当做子类对象使用,需要用强制转换来实现,子类对象变量=(子类名)基类对象名:错误的代码是d=m; d=c; 错误原因:类型不匹配:不能从 Mammal 转换为 Dog. 动手实验二:运行以下测试代码 上边的程序运行结果是什么?.你如

java动手动脑——异常处理

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

java异常处理动手动脑问题解决和课后总结

动手动脑 一.问题:请阅读并运行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 Exc

JAVA09异常处理之动手动脑问题

动手动脑1:为什么不管是否有异常发生,finally语句块中的语句始终保证被执行? 我们在写代码时,如果finally块中的代码过多会导致字节码条数"膨胀",因为finally中的字节码会被"复制"到try块和所有的catch块中.finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行. 动手动脑2:CatchWho.java,写出程序运行结果: ArrayIndexOutOfBoundsException/内层try-ca

java09动手动脑

一.动手动脑 运行AboutException.java示例 1)源代码 import javax.swing.*; class AboutException { public static void main(String[] a) { double i=-1, j=0, k; k=i/j; try { k = i/j; // Causes division-by-zero exception //throw new Exception("Hello.Exception!"); }

动手动脑接口与继承

(1)可以使用instanceof运算符判断一个对象是否可以转换为指定的类型: 参看实例: TestInstanceof.java public class TestInstanceof { public static void main(String[] args) { //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类 //但hello变量的实际类型是String Object hello = "Hello"; //String