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.cnblogs.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 zero
at 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");
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值