一、Java异常的基础知识
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常。
有些异常需要做处理,有些则不需要捕获处理,后面会详细讲到。
天有不测风云,人有旦夕祸福,Java的程序代码也如此。在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免、不可预测的情况则在考虑异常发生时如何处理。
Java中的异常用对象来表示。Java对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class),每个异常都对应一个异常(类的)对象。
异常类从哪里来?有两个来源,一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常。Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。
异常的对象从哪里来呢?有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!比如除数为0的异常。二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是Java语言中定义的,用throw 关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。
异常是针对方法来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的。
Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行,一般结构如下:
try{
程序代码
}catch(异常类型1 异常的变量名1){
程序代码
}catch(异常类型2 异常的变量名2){
程序代码
}finally{
程序代码
}
catch语句可以有多个,用来匹配多个异常,匹配上多个中一个后,执行catch语句块时候仅仅执行匹配上的异常。catch的类型是Java语言中定义的或者程序员自己定义的,表示代码抛出异常的类型,异常的变量名表示抛出异常的对象的引用,如果catch捕获并匹配上了该异常,那么就可以直接用这个异常变量名,此时该异常变量名指向所匹配的异常,并且在catch代码块中可以直接引用。这一点非常非常的特殊和重要!
Java异常处理的目的是提高程序的健壮性,你可以在catch和finally代码块中给程序一个修正机会,使得程序不因异常而终止或者流程发生以外的改变。同时,通过获取Java异常信息,也为程序的开发维护提供了方便,一般通过异常信息就很快就能找到出现异常的问题(代码)所在。
二、常见异常
UnsupportedOperationException不支持的操作
IllegalArgumentException非法参数
IndexOutOfBoundsException索引出界
SQLException:操作数据库异常类。
ClassCastException:数据类型转换异常。
NumberFormatException:字符串转换为数字类型时抛出的异常。
三、异常类
1、Throwable
Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
两个子类的实例,Error 和 Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。
2、Exception
Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件,表示程序本身可以处理的异常。
3、Error
Error 是 Throwable 的子类,表示仅靠程序本身无法恢复的严重错误,用于指示合理的应用程序不应该试图捕获的严重问题。
在执行该方法期间,无需在方法中通过throws声明可能抛出但没有捕获的 Error 的任何子类,因为Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。
4、RuntimeException
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过,这种异常可以通过改进代码实现来避免。
5、ThreadDeath
调用 Thread 类中带有零参数的 stop 方法时,受害线程将抛出一个 ThreadDeath 实例。
仅当应用程序在被异步终止后必须清除时才应该捕获这个类的实例。如果 ThreadDeath 被一个方法捕获,那么将它重新抛出非常重要,因为这样才能让该线程真正终止。
四、异常处理机制
第一、在方法中用try...catch语句捕获并处理异常,catach语句可以有多个,用来匹配多个异常。例如:
public void p(int x){
try{
...
}catch(Exception e){
...
}finally{
...
}
}
第二、对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常。例如:
public void test1() throws MyException{
...
if(....){
throw new MyException();
}
}
五、如何定义和使用异常类
1、使用已有的异常类,假如为IOException、SQLException。
try{
程序代码
}catch(IOException ioe){
程序代码
}catch(SQLException sqle){
程序代码
}finally{
程序代码
}
2、自定义异常类
创建Exception或者RuntimeException的子类即可得到一个自定义的异常类。例如:
public class MyException extends Exception{
public MyException(){}
public MyException(String smg){
super(smg);
}
}
3、使用自定义的异常
用throws声明方法可能抛出自定义的异常,并用throw语句在适当的地方抛出自定义的异常。例如:
在某种条件抛出异常
public void test1() throws MyException{
...
if(....){
throw new MyException();
}
}
将异常转型(也叫转译),使得异常更易读易于理解
分享到:
相关推荐
Java 异常处理习题 Java 异常处理是 Java 编程语言中的一种重要机制,用于处理程序在运行时可能出现的错误或异常情况。下面是关于 Java 异常处理的习题和知识点总结: 一、Java 异常处理关键字 * Java 中用来抛出...
java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理java异常处理
本文将从 Java 异常的基本概念和语法开始,讲述 Java 异常处理的基本知识,分析 Java 异常体系结构,对比 Spring 的异常处理框架,阐述异常处理的基本原则,并提出了自己处理一个大型应用系统异常的思想,并通过设计...
### Java异常处理 #### 一、异常的基本概念 在编程领域中,异常是指程序在运行过程中遇到的问题或错误状态,这些问题通常会导致程序无法按照预期的方式继续执行。在Java语言中,异常处理是一种重要的机制,用于...
Java异常处理是编程中至关重要的一个环节,它允许开发者优雅地处理程序运行时可能出现的错误,确保程序的健壮性和稳定性。Java中的异常处理机制基于一个独特的概念——异常(Exception),这是一种表示程序运行中...
这个主题,"Java异常处理体系",涉及到Java如何优雅地处理程序运行时的异常,确保程序的健壮性和稳定性。这篇博文链接(已提供但无法直接访问)可能详细解释了Java异常处理的基本概念、机制以及最佳实践。 Java异常...
### 浅析JAVA异常处理机制 #### 一、Java异常处理机制概述 异常处理是Java语言中的一个重要机制,它能够确保程序在遇到不可预料的情况时仍能维持稳定运行。异常处理主要包括三个方面:捕获异常、控制程序流程以及...
Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本篇文章将深入探讨Java异常处理的概念、机制以及如何通过代码实例进行有效的异常管理。 Java异常处理的核心...
Java异常处理设计是Java编程中一个至关重要的环节,它直接影响到程序的稳定性和可维护性。在Java中,异常处理是通过try-catch-finally语句块来实现的,主要涉及两大类异常:编译时异常(Checked Exception)和运行时...
Java异常处理的9个最佳实践涵盖了开发者在进行Java编程时应当遵循的一系列规则和方法,以确保代码的健壮性和可维护性。异常处理是编程中的一个重要部分,它能够帮助我们更有效地管理和响应程序运行时的错误情况。 ...
Java异常处理是Java编程语言中的一个关键特性,它允许程序员优雅地处理程序运行时可能出现的错误和不正常状况。在Java中,异常是程序执行过程中出现的问题,它们中断了正常的控制流程,使得程序无法继续按照预期的...
Java异常处理是Java编程中一个至关重要的概念,它关乎到程序的健壮性和稳定性。在Java语言中,异常处理提供了一种机制,使得程序在遇到错误或非正常情况时能够优雅地处理问题,而不是突然崩溃。这个“java高端技术...
通过遵循上述最佳实践,开发者可以编写出更健壮、可维护的Java代码,有效地利用Java异常处理机制来提高程序的稳定性。同时,阅读并理解"Effective Java Exceptions"文档可以帮助进一步深化对Java异常处理的理解。
从给定的文件内容中可以看出,这是一系列Java程序示例,它们用来说明Java异常处理机制。异常处理是Java语言中一个非常重要的部分,它能够帮助程序在遇到错误情况时仍然可以正常运行或者优雅地退出。这些程序通过各种...
java异常练习题,北大青鸟学士后课后练习,主要是异常处理的小测验
以下是对Java异常处理的一些误区和经验总结。 **误区一:过度使用try-catch块** 有些开发者习惯于在每个函数的开始部分都套用try-catch块,以为这样可以捕捉所有可能出现的异常。实际上,这种做法使得代码变得混乱...
零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理零基础学Java异常处理...