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

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

    import javax.swing.*;

    class AboutException {

       public static void main(String[] a)

       {

          float i=1, j=0, k;

          k=i/j;

          System.out.println(k);

        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");

         }

            

      }

    }

    异常处理:Java中异常捕获语句

    try{用于监控可能发生错误的语句}

    catch(异常类型 异常对象引用)

    { 用于捕获并处理异常的代码 }

    finally

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

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

    2>阅读以下代码(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");

            }

        }

    }

    运行结果:

    ArrayIndexOutOfBoundsException/内层try-catch
    发生ArithmeticException

    结果分析:当内层捕获异常并处理后,外层则不再捕获该异常。

    3>写出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");

            }

        }

    }

     

    运行结果:

    ArrayIndexOutOfBoundsException/外层try-catch

    结果分析:当异常未被处理时无法接受新的异常。

    4>请先阅读 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");

            

            }

        }

    }

    运行结果:

     

     

    结果分析:当外层异常未被处理时,内层异常不会被处理并且finally也不会执行,当有多层嵌套的finally语句时,异常在不同层次不同位置抛出时,也会导致不同的finally语句块执行顺序。

    5>finally语句块一定会执行吗?

    请通过 SystemExitAndFinally.java示例程序回答上述问题

    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");      

            }  

        }

    }

    运行结果:

     

     

     

    运行结果:首先只有与finally对应的try语句得到执行的情况下finally语句才会执行,但如果finally语句之前出现例如System.exit(0) 等使Java虚拟机停止运行的语句时finally语句也不会被执行

    6>编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。

    import java.util.Scanner;class MyException extends Exception

    {

        MyException(String str)

        {

            super(str);

        }

    }class GradeTest{

        private double grade;

        public void InputGrade(String s)

        {

            boolean flag = true;

            try

            {

                for(int i = 0;i<s.length();i++)

                {

                    if((s.charAt(i) < '0' || s.charAt(i) > '9')&& s.charAt(i) != '.')

                        flag = false;

                }

                if(!flag)

                {

                    throw new MyException("请输入数字!");

                }

                try{

                    grade = Double.parseDouble(s);

                    if(grade < 0.0 || grade > 100.0)

                    {

                        throw new MyException("请输入0.0100.0的数据!");

                    }

                    if(grade < 60.0)

                        System.out.println("不及格");

                    else if(grade <70.0)

                        System.out.println("及格");

                    else if(grade < 80.0)

                        System.out.println("");

                    else if(grade < 90.0)

                        System.out.println("");

                    else

                        System.out.println("");

                }

                catch(MyException e)

                {

                    System.out.println(e.getMessage());

                }

            }

            catch(MyException e)

            {

                System.out.println(e.getMessage());

            }

        }

    }public class Grade {

     

        public static void main(String[] args) {

            // TODO Auto-generated method stub

            Scanner in = new Scanner(System.in);

            GradeTest G = new GradeTest();

            System.out.println("请输入成绩:");

            String str = in.nextLine();

            G.InputGrade(str);

            in.close();

        }

     

    }

    运行结果:

     

     

     

     

     

  • 相关阅读:
    谷歌被墙,怎样给谷歌浏览器加入迅雷下载插件
    python文件和文件夹訪问File and Directory Access
    svn简单介绍
    javaproject积累——树形结构的操作
    Android多线程研究(1)——线程基础及源代码剖析
    Android4.4 Telephony流程分析——彩信(MMS)发送过程
    hadoop优质链接
    Android开发系列(二十一):Spinner的功能和使用方法以及实现列表选择框
    锤子Smartisan T1手机官方4.4.2系统内核版本号信息
    深入研究Clang(五) Clang Lexer代码阅读笔记之Lexer
  • 原文地址:https://www.cnblogs.com/ming123/p/6103270.html
Copyright © 2011-2022 走看看