zoukankan      html  css  js  c++  java
  • 动手动脑07

    1动手动脑

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

    class AboutException {

       public static void main(String[] a)

       {

          int i=0, j=1, 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");

         }

      }

    }

    j=0时出现异常,所以捕获错误,catch处理异常,不管是否有异常发生,finally语句块中的语句始终保证被执行。如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

    Throwable类有两个直接子类:

    Exception:出现的问题是可以被捕获的;

    Error:系统错误,通常由JVM处理。

    可捕获的异常又可以分为两类:

    1Check异常:直接派生自Exception的异常类,必须被捕获或再次声明抛出

    2Runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象:

       throw new ArithmeticException();

    2、动手动脑:多层的异常捕获-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");

            }

        }

    }

    结果:ArrayIndexOutOfBoundsException/内层try-catch

    发生ArithmeticException

    动手动脑:多层的异常捕获-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");

            }

        }

    }

    结果:ArrayIndexOutOfBoundsException/外层try-catch

    3、动手动脑

    结果:in Level 1

    in Level 2

    in Level 3

    Level 3:class java.lang.ArithmeticException

    In Level 3 finally

    Level 2:class java.lang.ArithmeticException

    In Level 2 finally

    In Level 1 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");

            

    }

        

    }

    }

    结果:in main

    Exception is thrown in main

    总结:当存在try中有throw new Exception...finally不会执行。

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

     
     1 package score;
     2 //信1605-2 刘宏琦 20163428 2017.11.16
     3 import java.util.*;
     4 public class Score{
     5     int score;
     6     void Setscore() {
     7         
     8         Scanner in=new Scanner(System.in);
     9         System.out.println("请输入成绩:");
    10         try{  //try输入
    11             score=in.nextInt(); //输入成绩
    12 
    13             if(score<=100&&score>=90)
    14             {
    15                 System.out.println("优");
    16             }
    17                 if(score<90&&score>=80)
    18                 {   
    19                     System.out.println("良");
    20                 }
    21                 else if(score<80&&score>=70)
    22                 {  
    23                     System.out.println("中");
    24                 }
    25                 else if(score<70&&score>=60)
    26                 {  
    27                     System.out.println("及格");
    28                 }
    29                 else if(score<60&&score>=0)
    30                 {
    31                     System.out.println("不及格");
    32                 }
    33                 else if(score<0||score>100)
    34                 {
    35                     System.out.println("超出范围!!");
    36                     Setscore();
    37                 }
    38         
    39         }
    40         catch (Exception e)   //捕获异常
    41         {
    42             System.out.println("错误输入!!  ");
    43             Setscore();  //返回输入
    44         }
    45         
    46         finally //结束
    47         
    48         {
    49             
    50             System.out.println("in finally");
    51         
    52         }
    53         
    54     }
    55     
    56     public static void main(String[] args) {
    57         // TODO Auto-generated method stub
    58     Score s=new Score();
    59     s.Setscore();
    60     }
    61 }

    结果:

     

     

     

  • 相关阅读:
    类的成员函数实现线程的回调函数
    Devexpress Chart series 点击时获取SeriesPoint的值
    递归树 TreeList
    ChartControl饼状图自定义调色板
    Devexpress GridControl.Export 导出
    .Net Core 实现 自定义Http的Range输出实现断点续传或者分段下载
    Js/Jquery获取网页屏幕可见区域高度
    js获取网页屏幕可视区域高度
    环境变量
    bat批处理文件怎么将路径添加到path环境变量中
  • 原文地址:https://www.cnblogs.com/liulala2017/p/7844023.html
Copyright © 2011-2022 走看看