首页 > 代码库 > 一大波Java来袭(二)异常处理

一大波Java来袭(二)异常处理

概要解析:

本章的知识点可以记为:1图+5关键字+先逮小的、后逮大的

 一、基础

(一)定义

1、异常

    是指在程序运行的时候发生的一些异常事件。良好的程序设计应该在异常发生的时候提供处理异常的方法,使得程序不会因为异常的发生而中断。因此Java提供的用于处理程序中错误的一种机制。

2、抛出异常throw

    java程序的执行过程中如出现异常事件,可以生成一个异常类对象(封装了异常事件的信息),被提交给java运行时系统。

简单理解为:推卸责任。马路上遇到了交通事故,不需要自己处理,而是拨打110,等待交警的处理。

3、捕获异常catch

    当java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理

简单理解为:承担责任。廊坊市警察局,接到报警电话以后,确定出现交通事故的区域来自于安次区,因此通知安次区的交警出动。

 

二、分类

 

(一)Error错误

系统错误,不能被处理。由Java虚拟机生成并抛出,包括动态链接失败,虚拟机错误等,程序对其不做处理。

(二)Exception所有异常类的父类

其子类对应了各种各样可能出现的异常事件,一般需要用户显示的声明或捕获。

1、Runtime Exception

    运行时错误,可以处理也可以不处理。由系统自动检测并将它们交给缺省的异常处理程序。如被0除,数组下标超范围等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序可读性和运行效率影响很大。

2、非RuntimeException

只要不是运行时错误,必须手动处理的。

 

三、异常的捕获和处理


(一)5个关键字

1、try语句

  • try{}语句指定了一段代码,该代码就是一次捕获并处理异常的范围。
  • 在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。
  • 如果没有例外产生,所有的catch代码段都被略过不执行

    简单解析为:廊坊市按照街道对职权进行划分,如果安次区发生了交通事故,那么本区域的交警就出动;如果安次区有人需要急救,那么负责本区域的120就出动;如果是邻居之间出现了不和谐的关系,那么居委会大妈就出动

2、catch语句

    在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

    简单理解为:同样都是安次区,可能会出现各种各样的麻烦事,堵车了则交警出动;有人犯罪则本区域的刑警出动;街坊邻居吵架则居委会出动。同样都是这个区域,根据出现的问题的种类不同,则负责处理事情的人也会有所不同。

3、finally语句

    • finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理。
    • 无论try所指定的程序块中是否抛出异常,finally所指定的代码都要被执行。
    • 通常在finally语句中可以进行资源的清除工作,如:关闭打开的文件,删除临时文件等

简单理解为:无论过程中出现了什么问题,反正最终结果都是:和平处理。绝不错杀一个好人,也不放过一个坏人。

(二)先逮小的、后逮大的

    异常的处理过程是:先捕捉并处理小的错误,后捕捉并处理大的错误。Exception的权利是最大的。

   简单理解为:遇到问题后,首先要内部调解,调解不同的话,可以选择地方政府打官司,然后地方政府说“我们职权范围内,没办法处理这事情,你向省地政府上诉吧!”……一直到问题被解决为止。

 

(三)自定义的异常

步骤如下:

    • 通过继承java.lang.Exception类声明自己的异常类
    • 在方法适当的位置生成自定义异常的实例,并用throw语句抛出
    • 在方法的声明部分用throws语句声明该方法可能抛出的异常。

 注意: 重写方法需要抛出与原方法所抛出异常类型一致异常,或者不抛出异常。

 

 

四、实例


import java.io.*;
	
class MyException entends Exception{
	private int id;
	public MyException(String message,int id){
		super(message);
		this.id=id;
	}
	public int getId(){
		return id;
	}
}

public class Test{
	public void regist(int num) throws MyException{
		if(num<0){
			throw new  MyException("人数为负值,不合理!",3);
		}
		System.out.println("登记人数"+num);
	}
	public void manager(){
		try {
			regist(100);
		} catch (MyException e) {
			 System.out.println(“登记失败,出错类型码=”+e.getId());
			 e.printStackTrace();
		}
		System.out.print("操作结束");
	}
	public static void main(String[] args){
	 	Test t=new Test();
	 	t.manager;
	}
}

五、总结

    “异常”这一章的知识点可以概括为:一个图、五个关键字、先逮小的后逮大的。

     映射到人生即是:生活中并不是一帆风顺,因此路途的过程中会遇到这样活那样的困难/挫折,家庭问题就要找本区的居委会来调解;如果是道路交通问题,拨打110,等待分配来的警察来处理;如果是路人病发,就要拨打120……因为人并不是万能的,不能够把所有的事情料理的一帆风顺,因此我们需要别人的帮助。有问题,只需要“help”一声抛出,就会有专人来救助。如果别人解决不了的话,就继续向上抛出直到问题处理完为止。

    “异常”,有问题就“抛”,会有专人解决的,不要让自己太累哦O(∩_∩)O~