• 异常处理


    1.           请阅读并运行AboutException.java示例

     import javax.swing.*;l

    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("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语句块中的代码用于处理错误。

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

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

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

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

            }

        }

    }

    3多层的异常捕获-2

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

            }

        }

    }

    4.

    Ø  当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。

    Ø  请先阅读EmbedFinally.java示例,再运行它,观察其输出并进行总结。

    Ø  特别注意:

    Ø  当有多层嵌套的finally时,异常在不同的层次抛出   ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

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

           

            }

       

    }

    }

    5.辨析:finally语句块一定会执行吗?

    package freeTest;

     

     

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

           

           }

       

        }

    }

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

    要求程序必须具备足够的健壮性,不管用户输入什    么样的内容,都不会崩溃

    程序代码:

    import java.util.*;

    class MyException extends Exception

    {

        MyException(String x)

        {

            super(x);

        }

    }

    public class ScoreRank {

        public static void main(String[] args) {

            Scanner scan=new Scanner(System.in);

            System.out.println("请输入学生的成绩");

            String score=scan.next();

            int flag=1;

            try 

            {

                if(score.length()>2)

                {

                    if(!score.equals("100"))

                        flag=0;

                }

                if(score.charAt(0)=='0')

                {

                    flag=0;

                }

                for(int i=1;i<score.length();i++)

                {

                    if(score.charAt(i)>'9'||score.charAt(i)<'0')

                    {

                        flag=0;

                    }

                }

                if(flag==0)

                {

                    MyException e=new MyException("非法输入");

                    throw e;

                }

            

            }

            catch(MyException e)

            {

                System.out.println(e);

            }

            if(flag==1)

            {

                int s=Integer.parseInt(score);

                if(s<60)

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

                else 

                {

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

                    if(s>60&&s<=70)

                        System.out.println("中");

                    if(s>70&&s<=80)

                        System.out.println("良");

                    if(s>80)

                        System.out.println("优");

                }

            }

        }

    }

  • 相关阅读:
    python 扁平列表转树状字典
    在Windows Server2012中通过DockerToolbox 一步一步搭建Mysql 数据库存运行环境
    腾讯云ubuntu服务器安装图像化界面并实现远程登陆
    IIS、apache、tomcat服务器虚拟主机配置
    微信商家二维码到底是什么
    线程与线程锁---python版本(附带线程锁实例)
    pip更新后仍旧是使用的旧版本
    pip更新后仍旧是使用的旧版本
    H5-LocalStorage
    Python摄像头抓拍的彩色图像转为灰度图、二值化和调整图片尺寸(实例)
  • 原文地址:https://www.cnblogs.com/dk1203573488/p/6102735.html
Copyright © 2020-2023  润新知