首页 > 学院 > 开发设计 > 正文

java学习笔记12--异常处理

2019-11-14 23:13:13
字体:
来源:转载
供稿:网友
java学习笔记12--异常处理

java学习笔记系列:

java学习笔记11--集合总结

java学习笔记10--泛型总结

java学习笔记9--内部类总结

java学习笔记8--接口总结

java学习笔记7--抽象类与抽象方法

java学习笔记6--类的继承、Object类

java学习笔记5--类的方法

java学习笔记4--对象的初始化与回收

java学习笔记3--类与对象的基础

java学习笔记2--数据类型、数组

java学习笔记1--开发环境平台总结

本文地址:http://www.VEVb.com/archimedes/p/java-study-note12.html,转载请注明源地址。

1、异常处理概述

从一个读取两个整数并显示商的例子:

public static void main(String args[]){    Scanner input = new Scanner(System.in);      System.out.PRint("Enter two integers: ");    int number1 = input.nextInt();    int number2 = input.nextInt();     System.out.println(number1 + " / " + number2 + " is " + (number1 / number2)); }

Enter two integers: 3 0

Exception in thread "main" java.lang.ArithmeticException: / by zeroat Main.main(Main.java:18)

解决的一个简单的办法是添加一个if语句来测试第二个数字:

public class Main{    public static void main(String args[])    {        Scanner input = new Scanner(System.in);                System.out.print("Enter two integers: ");        int number1 = input.nextInt();        int number2 = input.nextInt();        if(number2 != 0)            System.out.println(number1 + " / " + number2 + " is " + (number1 / number2));        else            System.out.println("Divisor cannot be zero ");    }}

为了演示异常处理的概念,包括如何创建、抛出、捕获以及处理异常,继续改写上面的程序如下:

public class Main{    public static void main(String args[])    {        Scanner input = new Scanner(System.in);                System.out.print("Enter two integers: ");        int number1 = input.nextInt();        int number2 = input.nextInt();        try {            if(number2 == 0)                throw new ArithmeticException("Divisor cannot be zero");            System.out.println(number1 + " / " + number2 + " is " + (number1 / number2));        }        catch(ArithmeticException ex) {            System.out.println("Exception: an integer " + "cannot be divided by zero ");        }        System.out.println("Execution continues ...");    }}
2、异常处理的优势

改用方法来计算商:

public class Main{    public static int quotient(int number1, int number2) {        if(number2 == 0)            throw new ArithmeticException("Divisor cannot be zero");        return number1 / number2;    }        public static void main(String args[])    {        Scanner input = new Scanner(System.in);                System.out.print("Enter two integers: ");        int number1 = input.nextInt();        int number2 = input.nextInt();        try {            int result = quotient(number1, number2);            System.out.println(number1 + " / " + number2 + " is " + result);        }        catch(ArithmeticException ex) {            System.out.println("Exception: an integer " + "cannot be divided by zero ");        }        System.out.println("Execution continues ...");    }}

异常处理的优势就是将检测错误从处理错误中分离出来。

3、异常类型

4、关于异常处理的更多知识

java的异常处理模型基于三种操作:声明一个异常、抛出一个异常、捕获一个异常

声明异常

在方法中声明异常,就是在方法头中使用关键字throws,如下所示:

public void myMethod throws Exception1,Exception2,……,ExceptionN

抛出异常

检测一个错误的程序可以创建一个正确的异常类型的实例并抛出它

实例:

IllegalArgumentException ex = new IllegalArgumentException("Worng Argument");throw ex;

或者直接:

throw new IllegalArgumentException("Worng Argument");

捕获异常

当抛出一个异常时,可以在try-catch中捕获和处理它:

try {    statements;} catch (exception1 ex1){    handler for exception1;} catch (exception1 ex2){    handler for exception2;} ……catch (exception1 exN){    handler for exceptionN;}    

从异常中获取信息

可以采用Throwable类中的方法获取异常的信息

public class test {    public static void main(String[] args) {        try {            System.out.println(sum(new int[]{1,2,3,4,5}));        } catch(Exception ex) {            ex.printStackTrace();            System.out.println(ex.getMessage());            System.out.println(ex.toString());            System.out.println("Trace Info Obtained from getBackTrace");            StackTraceElement[] traceElements = ex.getStackTrace();            for(int i = 0; i < traceElements.length; i++) {                System.out.print("monthod " + traceElements[i].getMethodName());                System.out.println("(" + traceElements[i].getClassName());                System.out.println(traceElements[i].getLineNumber() + ")");            }        }    }        private static int sum(int[] list) {        int sum = 0;        for(int i = 0; i <= list.length; i++) {            sum += list[i];        }        return sum;    }}

finally语句

无论异常是否出现,都希望执行某些代码,这时可以采取finally子句:

public class test {    public static void main(String[] args) {        PrintWriter output = null;        try {            output = new PrintWriter("wu.txt");            output.println("wlecome tio java");        } catch(IOException ex) {            ex.printStackTrace();        } finally {            if(output != null)                output.close();        }        System.out.println("End of the program");    }}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表