异常处理基础

1.java的异常分类

Throwable:
是所有异常的根,java.lang.Throwable

Error类(错误):是程序无法处理的错误,一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。你最好不要期望它出现,如果出现了,你的程序差不多彻底挂了,可以把它看成是程序终结者。

Exception类(异常):是程序本身可以处理的异常。一般是编码,环境,用户的输入等出现问题。它一般分为Checked异常和Runtime异常(运行时异常),所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则称为CheckedException。(检查异常,或非运行时异常)。

运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。

非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

2.处理异常

try-catch以及try-catch-finally

try{

//一些会抛出异常的方法

}catch(Exceptoin e){

//处理异常的代码快

}

如果try抛出异常,首先抛出异常的方法会终止执行,然后程序的控制权将被移交给catch块中的异常处理程序。catch块中的代码,可以根据不同的业务,选择不同的处理方式。例如输出一个警告,或记录错误日志。例如语句e.printStackTrace();可以打印异常的具体信息。在catch块语句执行完后,在其外面的语句会顺序执行。

当try块中抛出很多种异常,可以运用多重catch块,来捕获多种不同类型的异常,并对其作出相应的处理。如果出现异常并且已成功匹配一个后catch语句,执行catch语句时,仅执行完成匹配的catch语句块。

编写多重catch语句块需要注意顺序问题。

一定要按照先小后大,也就是先子类,后父类的顺序编写catch语句块。因为当程序抛出异常时,异常处理系统会就近寻找匹配的异常处理程序,子类继承父类,对于父类的异常处理程序,子类也是适用的。

当catch块处理好后异常后,有时还需要作一些善后工作,例如,关闭连接,关闭一些已经打开了的文件。我们就通过finally语句块来做这些善后工作。

finally是在try块,catch块的return语句执行完之后,返回主调函数之前执行的。无论try块是否抛出异常,catch块是否成功匹配异常,finally语句块都会执行。try块不能独立存在,必须和catch或finally同存。

时间: 2024-11-09 02:22:19

异常处理基础的相关文章

Java知多少(43)异常处理基础

Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象.当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被抛出(throw).该方法可以选择自己处理异常或传递该异常.两种情况下,该异常被捕获(caught)并处理.异常可能是由Java运行时系统产生,或者是由你的手工代码产生.被Java抛出的异常与违反语言规范或超出Java执行环境限制的基本错误有关.手工编码产生的异常基本上用于报告方法调用程序的出错状况. Java异常处理通过5个关键字控制:try.catch.th

Java中的异常处理:何时抛出异常,何时捕获异常?

1.如果方法声明名里面有throws异常,那么方法体里面可以不抛出异常.因为可以在方法声明中包含异常说明,但实际上却不抛出!这样做的好处是,为异常先占个位置,以后就可以抛出这种异常而不用修改修改已有的代码.在定义抽象基类和接口时这种能力很重要,这样派生类或接口实现类就能够抛出这些预先声明的异常. 2.为什么有的方法声明里面没有throws,但方法体里面却抛出了异常?从RuntimeException继承的异常,可以在没有异常说明throws的情况下被抛出!对于Runtime异常(也称为非检查的异

python基础篇【第八篇】面向对象(下)

一. 面向对象特性之多态: 上一篇已经介绍了面向对象的三大特性的前两种(封装.继承),下面来说说第三种多态,在python中用不上,但在其他语言中很重要. 多态的意思就是多种类型.多种形态,比如字符类型,数字,字典,列表等.在python中定义类或函数时不需要,指定是那种数据类型全都支持,但是在java.c#等其他语言中需要指定如下实例: def func(A arg) print(arg) arg :参数必须是A 类型,或A类型的子类 二.类成员: 类成员分为三大类:字段.方法.属性 1.字段

springMVC相关—异常处理

一.基于@ExceptionHandler 注解的异常处理方法: 1.加上<mvc:annotation-driven>标签:(该标签是标配,开发时一般都携带)    2.在当前Handler中定义由@ExceptionHandler注解修饰的方法,用于处理异常信息! @ExceptionHandler(value={异常类型.class}) @ExceptionHandler(value={异常类型.class,异常类型.class,........})    注意:    [email p

java之八 异常处理

异常处理基础 Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象.当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被引发(throw).该方法可以选择自己处理异常或传递该异常.两种情况下,该异常被捕获(catch)并处理.异常可能是由Java运行时系统产生,或者是由你的手工代码产生.被Java引发的异常与违反语言规范或超出Java执行环境限制的基本错误有关.手工编码产生的异常基本上用于报告方法调用程序的出错状况. Java异常处理通过5个关键字控制:try.ca

深入了解 Java 中的异常处理 + 面试题

# 深入了解 Java 中的异常处理 + 面试题 在程序开发中,异常处理也是我们经常使用到的模块,只是平常很少去深究异常模块的一些知识点.比如,try-catch 处理要遵循的原则是什么,finally 为什么总是能执行,try-catch 为什么比较消耗程序的执行性能等问题,我们本讲内容都会给出相应的答案,当然还有面试中经常被问到的异常模块的一些面试题,也是我们本篇要讲解的重点内容. 异常处理基础介绍 先来看看异常处理的语法格式: try{ ... } catch(Exception e){

Java知多少(完结篇)

Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java开发环境的搭建 Java知多少(6)第一个程序示例 Java知多少(7)类与对象 Java知多少(8)类库及其组织结构 Java知多少(9) import及Java类的搜索路径 Java知多少(10)数据类型及变量 Java知多少(11)数据类型转换 Java知多少(12)运算符 Java知多少(1

Java知多少(53)使用Java创建自己的异常子类

尽管Java的内置异常处理大多数常见错误,你也许希望建立你自己的异常类型来处理你所应用的特殊情况.这是非常简单的:只要定义Exception的一个子类就可以了(Exception当然是Throwable的一个子类).你的子类不需要实际执行什么——它们在类型系统中的存在允许你把它们当成异常使用. Exception类自己没有定义任何方法.当然,它继承了Throwable提供的一些方法.因此,所有异常,包括你创建的,都可以获得Throwable定义的方法.这些方法显示在表10-3中.你还可以在你创建

Java知多少(52)内置异常

在标准包java.lang中,Java定义了若干个异常类.前面的例子曾用到其中一些.这些异常一般是标准类RuntimeException的子类.因为java.lang实际上被所有的Java程序引入,多数从RuntimeException派生的异常都自动可用.而且,它们不需要被包含在任何方法的throws列表中.Java语言中,这被叫做未经检查的异常(unchecked exceptions ).因为编译器不检查它来看一个方法是否处理或抛出了这些异常. java.lang中定义的未经检查的异常列于