6:异常处理

异常处理

异常:是在运行时期发生的不正常情况。在java中用类的形式对不正常情况进行了描述和封装对象。

描述不正常的情况的类,就称为异常类。

以前正常流程代码和问题处理代码相结合, 现在将正常流程代码和问题处理代码分离。提高阅读性.

其实异常就是java通过面向对象的思想将问题封装成了对象.用异常类对其进行描述。

不同的问题用不同的类进行具体的描述。 比如角标越界。空指针等等。

问题很多,意味着描述的类也很多,将其共性进行向上抽取,形成了异常体系。

最终问题(不正常情况)就分成了两大类。

|--1,一般不可处理的。Error

特点:是由jvm抛出的严重性的问题。

这种问题发生一般不针对性处理。直接修改程序

|--2,可以处理的。Exception

该体系的特点:

子类的后缀名都是用其父类名作为后缀,阅读性很想。

异常可分为俩类

Error:jvm系统内部错误,我们对Error无能为力

Exception:编程错误或偶然的外在因素导致的一般性问题

Exception分非检查异常(RuntimeException)和检查异常

RuntimeException:空指针异常、数组下标越界异常、类型转换异常、算术异常

检查异常:编译时异常,即编写代码时就要求处理的异常

Throwable:无论是error,还是异常,问题,问题发生就应该可以抛出,让调用者知道并处理。

该体系的特点就在于Throwable及其所有的子类都具有可抛性。

可抛性到底指的是什么呢?怎么体现可抛性呢?

其实是通过两个关键字来体现的。

throws throw ,凡是可以被这两个关键字所操作的类和对象都具备可抛性.

throws 和throw的区别。

1,throws使用在函数申明上。

throw使用在函数内。

2,throws抛出的是异常类,可以抛出多个,用逗号隔开。

throw抛出的是异常对象。

throws是用来声明一个方法可能抛出的所有异常信息throw则是指抛出的一个具体的异常类型。通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;throw则需要用户自己捕获相关的异常(try---catch),而后在对其进行相关包装,最后在将包装后的异常信息抛
  1. //异常标准写法:
  2. public Test() throws RepletException {
  3. try {
  4. System.out.println("Test this Project!")
  5. }
  6. catch (Exception e) {
  7. throw new Exception(e.toString());
  8. }
  9. }

负数角标这种异常在java中并没有定义过。

那就按照java异常的创建思想,面向对象,将负数角标进行自定义描述。并封装成对象。

这种自定义的问题描述成为自定义异常。

注意:如果让一个类称为异常类,必须要继承异常体系,因为只有称为异常体系的子类才有资格具备可抛性

才可以被两个关键字所操作,throws throw

自定义异常时,要么继承Exception。要么继承RuntimeException。

如果继承exception则需要在函数处用throws抛出,继承了RuntimeException可以不用这样

Exception和RuntinmeException

  1. class FuShuIndexException extends Exception {
  2. FuShuIndexException() {
  3. }
  4. FuShuIndexException(String msg) {
  5. super(msg);
  6. }
  7. }
  8. class Demo {
  9. public int method(int[] arr, int index) throws NullPointerException// FuShuIndexException
  10. {
  11. if (arr == null)
  12. throw new NullPointerException("数组的引用不能为空!");
  13. if (index >= arr.length) {
  14. throw new ArrayIndexOutOfBoundsException("数组的角标越界啦,哥们,你是不是疯了?:"
  15. + index);
  16. }
  17. if (index < 0) {
  18. throw new FuShuIndexException("角标变成负数啦!!");
  19. }
  20. return arr[index];
  21. }
  22. }
  23. class ExceptionDemo {
  24. public static void main(String[] args) throws FuShuIndexException// NullPointerException
  25. {
  26. int[] arr = new int[3];
  27. Demo d = new Demo();
  28. int num = d.method(null, -30);
  29. System.out.println("num=" + num);
  30. System.out.println("over");
  31. }
  32. }

异常处理的捕捉形式:

这是可以对异常进行针对性处理的方式。

具体格式是:

try

{

//需要被检测异常的代码。

}

catch(异常类 变量FuShuIndexException e)

//该变量用于接收发生的异常对象,抛什么就catch什么

{

//处理异常的代码。

}

finally

{

//一定会被执行的代码。

}

异常处理的原则:

1,函数内容如果抛出需要检测的异常(throw),那么函数上必须要声明(throws)。

否则必须在函数内用trycatch捕捉,否则编译失败。

2,如果调用到了声明异常的函数,要么trycatch要么throws,否则编译失败。

3,什么时候catch,什么时候throws 呢?

功能内容可以解决,用catch。

解决不了,用throws告诉调用者,由调用者解决 。

4,一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。

内部又几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。

  1. class ExceptionDemo {
  2. public static void main(String[] args) {
  3. int[] arr = new int[3];
  4. Demo d = new Demo();
  5. try {
  6. int num = d.method(null, -1);
  7. System.out.println("num=" + num);
  8. } catch (NullPointerException e) {
  9. System.out.println(e.toString());
  10. } catch (FuShuIndexException e) {
  11. System.out.println("message:" + e.getMessage());
  12. System.out.println("string:" + e.toString());
  13. e.printStackTrace();// jvm默认的异常处理机制就是调用异常对象的这个方法。
  14. System.out.println("负数角标异常!!!!");
  15. }
  16. //多catch父类的catch放在最下面
  17. catch(Exception e) { }
  18. System.out.println("over");
  19. }
  20. }

需要注意的:

异常处理try....catch

异常抛出过程

finally通常用于关闭(释放)资源。

/*

连接数据库

查询。Exception

关闭连接。

*/

try catch finally 代码块组合特点:

1, try catch finally

2, try catch(多个)当没有必要资源需要释放时,可以不用定义finally。

3, try finally 异常无法直接catch处理,但是资源需要关闭。

  1. void show()throws Exception 
  2. {
  3.  try
  4.  {
  5.   //开启资源。
  6.   throw new Exception();
  7.  }
  8.  finally
  9.  {
  10.   //关闭资源。
  11.  }

异常的注意事项:

1,子类在覆盖父类方法时,父类的方法如果抛出了异常,

那么子类的方法只能抛出父类的异常或者该异常的子类。

2,如果父类抛出多个异常,那么子类只能抛出父类异常的子集。

简单说:子类覆盖父类只能抛出父类的异常或者子类或者子集。

注意:如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛,就只能try .

异常处理机制:

异常处理的标准结构:

  1. class Exception {
  2. public static int div(int x, int y) {// 异常由被调用者处理
  3. int result = 0;
  4. System.out.println("1.除法计算开始,打开计算功能");
  5. try {
  6. result = x / y;
  7. } catch (java.lang.Exception e) {
  8. throw e;
  9. } finally {
  10. System.out.println("2.除法计算结束,关闭计算功能");
  11. }
  12. return result;
  13. }
  14. public static void main(String[] args) {
  15. try {
  16. System.out.println("除法计算结果:" + div(10, 0));
  17. } catch (java.lang.Exception e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. }

来自为知笔记(Wiz)

时间: 2024-10-21 23:24:41

6:异常处理的相关文章

Laravel 5.4 中的异常处理器和HTTP异常处理实例教程

错误和异常是处理程序开发中不可回避的议题,在本地开发中我们往往希望能捕获程序抛出的异常并将其显示打印出来,以便直观的知道程序在哪里出了问题并予以解决,而在线上环境我们不希望将程序错误或异常显示在浏览器中(出于安全考虑),这个时候我们仍然要捕获异常,只不过不是显示到浏览器中,而是记录到日志中,方便日后排查问题. 百牛信息技术bainiu.ltd整理发布于博客园 Laravel当然支持PHP原生的错误和异常处理,但是在此基础上进行了一些封装处理,从而更方便在不同开发环境切换以及对错误和异常的处理.

跟着百度学PHP[11]-PHP当中的异常处理

首先要说一下常见的三种错误: 1.语法错误 2.运行错误 3.逻辑错误 00x1 错误报告及错误级别 PHP的错误分为三个等级 1.注意(notice)   没有变量a 2.警告(warning) 没有给函数传值 3.致命的错误(fatal error) 函数写错 错误的报告级别可以在PHP.ini当中修改.在PHP.ini当中找到错误报告“error_reporting = E_ALL ” 这个的意思是将所有的错误都提示出来.ps:~是除了的意思.&是和的意思.error_reporting

JAVASE02-Unit08: 文本数据IO操作 、 异常处理

Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /** * java.io.Ob

python3_装饰器_异常处理

装饰器: def auth(func):     def wrapper(name):                     如果函数带参数,要加在这里         user=raw_input("input passwd:").strip()         if user=='test':             print "welcome login"             func(name)              如果函数带参数,要加在这里

动手动脑(异常处理)

1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*; class AboutException { public static void main(String[] args) { float i=1, j=0, k; k=i/j; System.out.println(k); try { k = i/j;    // Causes division-by-zero exceptio

异常处理

我们在使用Java语言高级API进行程序设计之前,我们还需要理解Java语言中另一个基础特色-----异常处理 异常(Exception)是程序在执行过程中所产生的问题.导致异常产生的原因有很多种: 用户输入了无效的数据.找不到一个需要打开的文件.在通讯过程中网络连接断开或者JVM发生了内存溢出 异常的分类: 检查异常-----是用户错误或不能被程序所遇见的问题 运行时异常-----是一个程序在运行过程可能发生的问题 错误-------实际上,错误根本不是异常,但却是用户或程序所无法控制的问题

Java异常处理

异常的层次结构 所有的异常类都是 java.lang.Exception 类的子类型.异常类都是 Throwable 类的子类.除了异常类 Error 类也是由 Throwable 类产生的的子类1. public String getMessage() 返回关于发生异常的细节信息,这些信息在Throwable的构造函数中被初始化2. public Throwable getCause() 返回发生异常的原因,由 Throwable 对象来表示3. public String toString(

SpringMVC 异常处理

一.异常解析器应该具有的功能: 1.既然使用异常解析器,那么就不必在Controller中对异常进行处理,抛出即可,简化开发,异常统一控制. 2.ajax请求(有@ResponseBody的Controller)发生错误,输出JSON. 3.页面请求(无@ResponseBody的Controller)发生错误,输出错误页面. 4. 它需要与AnnotationMethodHandlerAdapter使用同一个messageConverters 5.异常处理细节可控制. 二.SpringMVC异

16.如何自学Struts2之Struts2异常处理[视频]

16.如何自学Struts2之Struts2异常处理[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 有问题可以直接回复这篇文章.

详解Linux内核异常处理体系结构

本节内容:Linux内核异常处理的的初始化过程和异常发生时的处理流程. [首先来区分一下两个概念:中断(Interrupt)和异常(Exception).中断属于异常的一种,就拿2440开发板来说,他有60多种中断源,例如来自DMA控制器.UART.IIC和外部中断等.2440有一个专门的中断控制器来处理这些中断,中断控制器在接收到这些中断信号之后就需要ARM920T进入IRQ或FIQ模式进行处理,这两种模式也是中断异常的仅有模式.而异常的概念要广的多,它包括复位.未定义指令.软中断.IRQ等等