17.03.11 异常处理

一、一般结构

public class Test{
	try{
	//可能发生异常的代码块
	}
	catch(Exceptiontype e) {
	// 对Exception e的处理,Exception是异常变量类型,e是变量名
	}
	catch(Exceptiontype e2){
	// ……
	}
	Finally{
	//无论try中的代码如何退出,都将执行finally块
	}
}

 

(1)处理过程:程序先执行try语句块,如果try语句块有异常,将执行catch语句块,执行完catch语句块后,直接执行后面语句,不会再执行try语句中异常后面的代码。

 

(2)catch中常用函数有(通过e.函数名调用):

         getMessage():输出错误性质

         toString():给出异常的类型与性质

         printStackTrace():给出异常的类型、性质栈层次以及出现在程序的位置

 

(3)一般情况下,无论try中代码返回如何,都将执行finally语句块,以下情况,将不会执行finally语句块:

         finally语句块发生异常

         前面的代码使用System.exit()退出程序

         程序所在线程死亡

         关闭CPU

 

(4)关于多个catch的使用的说明:多个catch的关系类似“或”的关系,try捕捉到什么异常就跳转到对应的catch语句中(根据catch后面的参数决定),不会执行无关的catch异常;正因为如此,多个catch之间是有一定的顺序要求的:越是上层级的类,越要放到后面,如果上层级的异常类放到最前面,后面的具体类(子类)将永远执行不了。

 

二、自定义异常

 

自定义异常一般步骤:

(1)创建自定义异常类(继承Exception类),构造方法中继承父类构造方法,异常类的构造器可接受字符串作为参数,如:

public class MyException extends Exception() {    //继承至Exception类
         Public MyException(String ErroMessage){
                   Super(ErroMessage)  //父类构造方法
         }
}

(2) 定义方法时候,通过throws抛出自定义异常(throws在方法参数后面);在方法中,通过throw关键字,抛出自定义异常对象

(3)通过try……catch处理异常

代码如下:

import java.util.Scanner;

public class ExceptionTest {
	
	public  static int avg  (int m,int n) throws MyException{
		if(m>100||n>100){
			throw new MyException("m或n值超过100");
		}
		if(m<0||n<0){
			throw new MyException("m或n值小于0");
		}
		
		return (m+n)/2;
	}
	public static void main(String[] args){
		try{
			Scanner m=new Scanner(System.in);
			System.out.println("请输入第一个数");
			int a=m.nextInt();
			System.out.println("请输入第二个数");
			int b=m.nextInt();
			avg(a,b);
		}
		catch(MyException e){
			e.printStackTrace();
		}
	}
}

 

三、在方法中抛出异常

 

         某个方法发生异常,但不想在该方法中处理异常时,可以使用throws、throw抛出异常,

throws

throw

方法申明中,且位于参数括号后面,多个异常用逗号分隔

方法体中

抛出异常类(类似继承,后面直接加类名)

抛出为异常对象,throw的异常必须要用try……catch捕捉

 

 

四、异常的分类

 

error用来描述java运行系统内部的错误以及资源耗尽的错误,这类错误比较严重;

exception类称为非致命类,可通过捕捉,使程序继续执行。

五、异常使用原则

        

         (1)在当前方法中,使用try……catch语句

         (2)一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类

         (3)如果父类抛出多个异常,那么子类继承至父类的的方法,抛出的异常必须是父类异常的一个子集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值