黑马程序员——异常
来源:互联网 发布:遗传算法工具箱怎么用 编辑:程序博客网 时间:2024/06/05 15:38
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
异常
简介
在程序设计中,错误通常分为编译错误和运行错误。
编译错误是比较容易发生的,而运行错误常常让开发人员感到头疼。
异常就是一个运行错误,如果不能很好的处理异常,则项目的稳定性就不强。所以为了增强项目的稳健性,就要求在出现异常时进行处理,即异常处理
1 、error和exception
Error类和Exception类都继承自Throwable类(是java语言中所有错误或异常的超类),是它的两个基本子类。Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,比如,内存资源不足等,对于这种错误,程序基本无能为力,程序员只能让程序终止,除了退出运行别无选择。
Exception(异常)表示需要捕捉或者程序进行处理的异常,一般是因为编程错误或偶然的外在因素导致的一般性问题,比如,对负数开平方根、访问空指针等等,对于这种错误,有补救和控制的可能,程序员可以预先防范。
2 、异常分类
2.1 非受检异常(unchecked exception)
是指编译器不要求强制处置的异常。一般是因为涉及或实现方式不当而导致的问题。
java.lang.ClassCastException:错误的类型转换异常
java.lang.ArrayIndexOutOfBoundsException:数组下标越界异常
java.lang.NullPointerException:空指针访问异常
java.lang.ArithmeticException:除零溢出异常
2.2 受检异常(checked exception)
是指编译器要求必须处置的异常。由于外界因素造成的一般性异常。
java.lang.ClassNotFoundException:没有找到具有指定名称的类异常
java.io.FileNotFoundException:访问不存在的文件异常
java.io.IOException:操作文件时发生的异常
java.sql.SQLException:操作数据库时发生的异常
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
(2)一个方法必须声明所有可能抛出的已检查异常。
(3)对于那些可能被他人使用的java方法,应该根据异常规范(exception specification),在方法的首部声明这个方法可能抛出的异常。
如果一个方法有可能抛出多个已检查异常,就必须在方法的首部列出所有的异常类。如下面例子所示:
public Image loadImage(String s) throws EOFException, MalformedURLException
{ ... }
(4)在java中,没有throws说明符的方法将不能抛出任何已检查异常。
(5)如果在子类中覆盖了超类的一个方法,子类方法中声明的已检查异常不能超过超类方法中声明的范围。
如果超类方法没有抛出任何已检查异常,子类也不能抛出任何已检查异常。
(6)不应该声明java的内部错误,即从Error继承的错误。
不应该声明从RuntimeException继承的那些未检查异常。
① 找到一个合适的异常类。
② 创建这个类的一个对象。
③ 将对象抛出。
(2)一旦方法抛出了异常,这个方法就不可能返回到调用者。
习惯上,定义的异常类应该包含两个构造器:一个是默认构造器;另一个是带有详细描述信息的构造器。例如:
(2)如果调用了一个抛出已检查异常的方法,就必须对它进行处理,或者将它传递出去。
通过,应该捕获那些知道如何处理的异常,而将那些不知道怎样处理的异常传递出去。如果想将异常传递出去,就必须在方法的首部添加一个throws说明符。
(3)如果编写一个覆盖超类的方法,而这个方法又没有抛出异常,那么这个方法就必须捕获方法代码中出现的每一个已检查异常。
不允许在子类的throws说明符中出现超过超类的方法所列出的异常类范围。
注:
当try{}里有一个return语句的时候,finally{}中的代码也会在return之前执行。
3、声明已检查异常
(1)如果遇到无法处理的情况,那么java的方法可以抛出一个异常。(2)一个方法必须声明所有可能抛出的已检查异常。
(3)对于那些可能被他人使用的java方法,应该根据异常规范(exception specification),在方法的首部声明这个方法可能抛出的异常。
如果一个方法有可能抛出多个已检查异常,就必须在方法的首部列出所有的异常类。如下面例子所示:
public Image loadImage(String s) throws EOFException, MalformedURLException
{ ... }
(4)在java中,没有throws说明符的方法将不能抛出任何已检查异常。
(5)如果在子类中覆盖了超类的一个方法,子类方法中声明的已检查异常不能超过超类方法中声明的范围。
如果超类方法没有抛出任何已检查异常,子类也不能抛出任何已检查异常。
(6)不应该声明java的内部错误,即从Error继承的错误。
不应该声明从RuntimeException继承的那些未检查异常。
4、抛出异常
(1)对于一个已经存在的异常类,将其抛出非常容易:① 找到一个合适的异常类。
② 创建这个类的一个对象。
③ 将对象抛出。
(2)一旦方法抛出了异常,这个方法就不可能返回到调用者。
5、创建异常类
只需要定义一个派生于Exception的类,或者派生于Exception子类的类。习惯上,定义的异常类应该包含两个构造器:一个是默认构造器;另一个是带有详细描述信息的构造器。例如:
class FileFormatException extends IOExcption { public FileFormatException(){} public FileFormatException(String gripe) { super(gripe); } }
6、捕获异常
(1)如果某个异常发生的时候没有在任何地方进行捕获,那么程序就会终止执行,并在控制台上打印出异常信息。(2)如果调用了一个抛出已检查异常的方法,就必须对它进行处理,或者将它传递出去。
通过,应该捕获那些知道如何处理的异常,而将那些不知道怎样处理的异常传递出去。如果想将异常传递出去,就必须在方法的首部添加一个throws说明符。
(3)如果编写一个覆盖超类的方法,而这个方法又没有抛出异常,那么这个方法就必须捕获方法代码中出现的每一个已检查异常。
不允许在子类的throws说明符中出现超过超类的方法所列出的异常类范围。
注:
当try{}里有一个return语句的时候,finally{}中的代码也会在return之前执行。
0 0
- 黑马程序员—异常
- 黑马程序员—异常
- 黑马程序员—异常
- 黑马程序员—异常
- 黑马程序员—异常
- 黑马程序员—异常
- 黑马程序员—异常
- 黑马程序员——异常
- 黑马程序员——异常
- 黑马程序员——异常
- 黑马程序员——异常
- 黑马程序员——异常
- 黑马程序员——异常
- 黑马程序员——异常
- 黑马程序员——异常
- 黑马程序员——异常
- 黑马程序员——异常
- 黑马程序员——异常
- 建立顺序环形队列算法库 .
- 空间统计基础
- 空间统计-分布模式工具集,Analyzing Patterns Toolset
- 第七周--项目3负数把正数赶出队列
- 阶段性项目练习任务说明
- 黑马程序员——异常
- 空间统计---度量地理分布工具集,Measuring Geographic Distributions
- 第4周项目4 建设双链表算法库
- 第六周项目2-建立链栈算法库
- 第三周 项目2 — 建设“顺序表”算法库
- camera摄像原理之一:光感应
- 空间统计--空间关系建模工具集,Modeling Spatial Relationships
- 第四周项目4—建设双链表算法库
- 空间统计--Mapping Clusters&Utility工具集