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

        }

     

    }

    运行结果:

     

     

     

     

     

  • 相关阅读:
    HBase with MapReduce (MultiTable Read)
    HBase with MapReduce (SummaryToFile)
    HBase with MapReduce (Summary)
    HBase with MapReduce (Read and Write)
    HBase with MapReduce (Only Read)
    Hbase中的BloomFilter(布隆过滤器)
    HBase的快照技术
    How To Use Hbase Bulk Loading
    Cloudera-Manager修改集群的IP
    Java中的HashSet和TreeSet
  • 原文地址:https://www.cnblogs.com/ming123/p/6103270.html
Copyright © 2011-2022 走看看