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

简介:

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");
    }
}
目录
相关文章
|
1月前
|
Java 程序员
Java 异常处理与正则表达式详解,实例演练及最佳实践
在 Java 代码执行期间,可能会发生各种错误,包括程序员编码错误、用户输入错误以及其他不可预料的状况。 当错误发生时,Java 通常会停止并生成错误消息,这个过程称为抛出异常。 try...catch 语句 try 语句允许您定义一段代码块,并在其中测试是否发生错误。 catch 语句允许您定义一段代码块,当 try 块中发生错误时执行该代码块。 try 和 catch 关键字成对使用,语法如下:
42 0
|
1月前
|
Java 程序员
Java中的异常处理机制
【2月更文挑战第22天】在Java编程中,异常处理是一个重要的概念。它允许程序员在程序执行过程中遇到错误时,对错误进行处理,而不是让程序崩溃。本文将介绍Java中的异常处理机制,包括异常的分类、如何捕获和处理异常以及自定义异常等内容。
18 1
|
1月前
|
Java 程序员 索引
Java中的异常处理:理解、实践与最佳实践
【2月更文挑战第26天】在Java编程中,异常处理是一个重要的概念。它不仅帮助我们在程序出错时提供有关错误的详细信息,而且还允许我们以一种结构化的方式来处理这些错误。本文将深入探讨Java中的异常处理,包括如何创建自定义异常,如何使用try-catch-finally语句块,以及如何在实际编程中应用最佳实践。
27 3
|
1月前
|
Java UED
Java中的异常处理:捕获、声明与抛出
Java中的异常处理:捕获、声明与抛出
56 0
|
1月前
|
Java
Java中的异常处理
Java中的异常处理
14 0
|
1月前
|
Java 编译器 程序员
Java中的异常处理:从基础到高级
【2月更文挑战第24天】本文将深入探讨Java中的异常处理,从基础的try-catch块到高级的异常处理策略。我们将了解如何使用Java的异常处理机制来提高代码的健壮性和可维护性,以及如何处理运行时和编译时的异常。
22 0
|
16天前
|
Java
Java中的throw和throws:异常处理详解
Java中的throw和throws:异常处理详解
21 0
|
23天前
|
Java 程序员 开发者
深入理解Java异常处理机制
在Java编程中,异常处理是确保程序健壮性与稳定性的重要组成部分。本文旨在深度剖析Java异常处理机制的核心概念、结构及其实际应用策略,帮助开发者更好地理解并运用异常处理来优化程序设计。我们将从Java异常体系结构入手,探讨try-catch-finally语句块的执行流程,分析自定义异常的必要性与实现方式,并通过实例演示如何有效地管理和处理异常情况。
23 3
|
29天前
|
Java 程序员 API
Java中的异常处理:理解、实践与最佳实践
在Java编程中,异常处理是一个重要的概念。本文将深入探讨Java中的异常处理,包括其基本概念、如何在实践中应用,以及一些最佳实践。我们将通过实例和代码片段来解析这些概念,以帮助读者更好地理解和应用Java的异常处理。
10 0
|
30天前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
92 3