异常

异常处理:
注:
1.异常是运行期出现的错误;观察错误的名字和行号最重要!!
2.捕获异常的时候,要先捕获小的异常再捕获大的异常,注意异常层次。

1.Java异常概念
(1)Java异常时Java提供的用于处理程序中的错误的一种机制;
(2)所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界所要读取的文件不存在);
(3)设计良好的程序应该在异常发生时提供处理这些错误的方法,使的程序不会因为异常的发生二阻断或产生不可预见的结果;
(4)Java程序的执行过程中去如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给Java运行时系统,这个过程称为抛出(throw)异常;
(5)当Java运行时系统接收到异常时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这以过程称为捕获(catch)异常。

2.Java异常的分类
J2SDK中定义了很多异常类,这些类对应了各种各样可能出现的异常事件。

(1)Error 错误,由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,程序对其不做处理(系统生成的异常,不需捕获,也捕获不了)。
(2)Exception 所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显式的声明或捕获(一般要捕获的异常)。
(3)RuntimeException 一类特殊的异常,如被0处、数组下标超出范围等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序可读性和运行效率影响很大,因此由系统自动检测并将它们交给缺省的异常处理程序,用户课不必对其处理(可以捕获处理,但不需捕获的异常)。

3.异常的捕获和处理
例:

public void someMethod(){
	//声明该方法可能抛出的异常
	throes SomeException{
		if(someCondition()){
		//构造并抛出异常对象
		throw new SomeException("错误原因");
		}
	}
}
//尝试捕获异常;
try{
	System.out.println(2/0);//异常语句
}catch(ArithmeticException ae){ //捕获异常;ae为自定义的异常的名字
	System.out.println("异常提示");
	ae.printStackTrace(); //printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容;打印错误堆栈信息;
}catch(SomeException ae){ //一个try可以有多个catch;
	System.out.println(ae.getMessage());//getMessage()方法,用来得到有关异常事件的信息;
}finally{ //异常处理的出口,不管有没有捕获到异常都会执行,通常用来进行资源的清除工作;
	try{
		in.close();//关闭;
	}
}

//throws 抛出异常,当下方法已经捕获到异常但不处理异常,若调用该方法时需要处理该异常;
void m(int i) throws ArithmetcException{
	if(i==0){
		throw new ArithmetcException("被除数为0");
	}
}

Java的例外处理机制使得例外事件沿着被调用的顺序往前寻找,只要找到符合该例外种类的例外处理程序。

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

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

例:

//继承
class MyException extends 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[] agrs){
		  Test t = new Test();
		  t.manager();
	 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值