JAVA09 异常处理

一.动手动脑 运行AboutException.java示例,了解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!");
    }

    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  "+k);
             //JOptionPane.showInternalConfirmDialog(null, k);
     }
  }

}

2)结果截图

3)结果分析

Try{
   //可能发生运行错误的代码;
  }
  catch(异常类型     异常对象引用){
   //用于处理异常的代码
  }
  finally{
   //用于“善后” 的代码
  }

Java 中所有可捕获的异常都派生自 Exception 类。

二.使用Java异常处理机制

?把可能会发生错误的代码放进try语句块中。
?当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。catch语句块中的代码用于处理错误。
?当异常发生时,程序控制流程由try语句块跳转到catch语句块。
?不管是否有异常发生,finally语句块中的语句始终保证被执行。
?如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

三.动手动脑  多层的异常捕获-1

1)源代码

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)结果截图

3)结果分析
抛出两次异常,第一次处理完毕后,处理第二次。

四.动手动脑  多层的异常捕获-2

1)源代码

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

2)结果截图

3)结果分析

一个异常匹配结束后,才能执行下一个异常,系统不能累积处理异常。

五.动手动脑  当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。

1)源代码

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

2)结果截图

3)结果分析

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

六.动手动脑  finally语句块一定会执行吗?

1)源程序

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

2)结果截图

3)结果分析

不一定。因为当运行 System.exit(0);时,终止了JAVA虚拟机,导致不能执行finally的内容。

七.动手动脑

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

1)源代码

//20161123 高雪彤
/*编写一个程序,此程序在运行时要求用户输入一个    整数,代表某门课的考试成绩,
 * 程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。
要求程序必须具备足够的健壮性,不管用户输入什    么样的内容,都不会崩溃。
*/
import java.util.*;
public class Prograss {
    public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);
        String pro;
        System.out.println("请输入成绩:");
        while(true){
        try{
            pro=sc.nextLine();
            if(pro.matches("\\D*")){
                throw new InException("输入有误!不是的不是数字!");
            }
            else{
                int proo=Integer.parseInt(pro);
                System.out.print("输入正确!");
                judge(proo);
                break;
            }
         }
        catch(InException e){
            System.out.print("请重新输入:");
        }
    }
        sc.close();
    }

    public static void judge(int pro){
        if(pro>=0&&pro<60)
            System.out.println("成绩不合格!");
        else if(pro<70)
            System.out.println("成绩合格!");
        else if(pro<80)
            System.out.println("成绩中!");
        else if(pro<90)
            System.out.println("成绩良!");
        else if(pro<=100)
            System.out.println("成绩优!");
        else
            System.out.println("输入成绩不符");
    }
}

class InException extends Exception{//
    public InException(String msg){
        super(msg);
    }
}

2)结果截图

时间: 2024-08-24 02:46:04

JAVA09 异常处理的相关文章

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

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

Laravel 5.4 中的异常处理器和HTTP异常处理实例教程

错误和异常是处理程序开发中不可回避的议题,在本地开发中我们往往希望能捕获程序抛出的异常并将其显示打印出来,以便直观的知道程序在哪里出了问题并予以解决,而在线上环境我们不希望将程序错误或异常显示在浏览器中(出于安全考虑),这个时候我们仍然要捕获异常,只不过不是显示到浏览器中,而是记录到日志中,方便日后排查问题. 百牛信息技术bainiu.ltd整理发布于博客园 Laravel当然支持PHP原生的错误和异常处理,但是在此基础上进行了一些封装处理,从而更方便在不同开发环境切换以及对错误和异常的处理.

跟着百度学PHP[11]-PHP当中的异常处理

首先要说一下常见的三种错误: 1.语法错误 2.运行错误 3.逻辑错误 00x1 错误报告及错误级别 PHP的错误分为三个等级 1.注意(notice)   没有变量a 2.警告(warning) 没有给函数传值 3.致命的错误(fatal error) 函数写错 错误的报告级别可以在PHP.ini当中修改.在PHP.ini当中找到错误报告“error_reporting = E_ALL ” 这个的意思是将所有的错误都提示出来.ps:~是除了的意思.&是和的意思.error_reporting

JAVASE02-Unit08: 文本数据IO操作 、 异常处理

Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /** * java.io.Ob

python3_装饰器_异常处理

装饰器: def auth(func):     def wrapper(name):                     如果函数带参数,要加在这里         user=raw_input("input passwd:").strip()         if user=='test':             print "welcome login"             func(name)              如果函数带参数,要加在这里

动手动脑(异常处理)

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

异常处理

我们在使用Java语言高级API进行程序设计之前,我们还需要理解Java语言中另一个基础特色-----异常处理 异常(Exception)是程序在执行过程中所产生的问题.导致异常产生的原因有很多种: 用户输入了无效的数据.找不到一个需要打开的文件.在通讯过程中网络连接断开或者JVM发生了内存溢出 异常的分类: 检查异常-----是用户错误或不能被程序所遇见的问题 运行时异常-----是一个程序在运行过程可能发生的问题 错误-------实际上,错误根本不是异常,但却是用户或程序所无法控制的问题

Java异常处理

异常的层次结构 所有的异常类都是 java.lang.Exception 类的子类型.异常类都是 Throwable 类的子类.除了异常类 Error 类也是由 Throwable 类产生的的子类1. public String getMessage() 返回关于发生异常的细节信息,这些信息在Throwable的构造函数中被初始化2. public Throwable getCause() 返回发生异常的原因,由 Throwable 对象来表示3. public String toString(

SpringMVC 异常处理

一.异常解析器应该具有的功能: 1.既然使用异常解析器,那么就不必在Controller中对异常进行处理,抛出即可,简化开发,异常统一控制. 2.ajax请求(有@ResponseBody的Controller)发生错误,输出JSON. 3.页面请求(无@ResponseBody的Controller)发生错误,输出错误页面. 4. 它需要与AnnotationMethodHandlerAdapter使用同一个messageConverters 5.异常处理细节可控制. 二.SpringMVC异