java的异常处理

异常处理的概念

异常又称为例外,是特殊的运行错误对象。程序在运行期间可能会遇到一些非预期的或不正常的错误,这些错误将会阻止程序的正常运行。
当发生异常时,系统中需要有一个相应的机制来处理它,确保程序可以继续正常运行,而不会产生死机、死循环或其他对操作系统的损害,从而保证整个程序运行的安全性。这就是异常处理机制。应用Java的异常处理机制,在程序出现异常时,程序员可以捕获该异常,并进行相应的处理。

Exception类(异常)和Error类(错误)的区别。

1、Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。 程序中应当尽可能去处理这些异常。 Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时, Java虚拟机(JVM)一般会选择线程终止。
2、Exception 代表的是一旦发生可以处理并不会影响程序的正常允许的例外,可以通过代码进行处理, Error代表的是一旦发生是不能恢复,程序终止的例外 ,不能通过代码进行处理

Exception类(异常)

一、 Exception可分为两大类1、运行时异常(RuntimeExcepiton):在程序运行期间发生的异常,可以避免 不强制必须处理,(非检查异常)
2.检查异常:不可避免 必须进行异常处理,否则无法通过编译。
二、异常的发生有两种情况:1、系统自动抛出异常。一般是由于编程错误或者数据错误而导致的异常。2、显式使用throw语句抛出异常。显式抛出异常的步骤:使用new创建异常类的对象,该对象类型是Exception或Exception的子类。使用throw语句抛出异常。
三、异常的传递:沿着方法的调用链反向传递。

异常的捕获和处理

1、使用try{}catch{}块捕获异常:
try {
可能会发生异常的代码
} catch (异常类型 异常变量名) { // 捕获例外
异常处理代码 // 处理异常
}
发生的异常类型与catch中异常的类型相同则可以被捕获,发生的异常类型是catch中异常的类型的子类也可以被捕获。如果try部分的代码没有发生错误,catch块的代码不会执行,如果一段代码肯定不会发生异常,则可以不用try{}catch{}块,嵌套时内层的catch捕捉的异常类型不能是外层异常的父类。
如果一段代码块可能会有多个异常,则有如下方法:

	try {
		test3(sc.nextInt());//代码块
	}
//	1:多重catch。多个catch块中,如果异常类型没有父子关系,则catch块的顺序可以随意,
   如果有父子关系,则子类catch块必须写在前面,父类catch块写在后面
	catch (NullPointerException e) {
		e.printStackTrace();
	}catch (IndexOutOfBoundsException  e) {
		e.printStackTrace();
	}catch (NumberFormatException e) {
		e.printStackTrace();
	}
//	2:muti-catch :一个catch可以处理多个异常,jdk7新特性
	catch(NullPointerException|IndexOutOfBoundsException|NumberFormatException e) {
		e.printStackTrace();
   }
//	3:用需要处理异常的父类进行处理
	catch (RuntimeException e) {
	e.printStackTrace();
	}  

2、throws:声明式异常处理:
这种异常处理的方法,不能从根本上解决异常,但是可以告诉调用者,该方法可能会出现的异常。throws在使用时必须要注意,throws抛出的异常一定是系统或throw产生异常类的类型或者是异常类的父类,所有异常都可以在throws时用Exception进行替代, 一个方法可以进行多个申明式异常处理,只用在多个异常中间用“,”分割即可,如果声明的多个异常太多可以用这些异常的父类进行替换
3、finally{}:表示最终总会执行的代码一般用在try{}catch(){}后面。执行时机:在return语句执行之后,结果返回之间执行, 如果finally语句中有return语句,则会覆盖掉之前的return值

自定义异常

除了使用系统预定义的异常类外,还可以声明自己的异常类, 自定义异常必须继承Exception或Exception的子类,继承RuntimeException或其子类的类被成为自定义运行时异常;继承了除RuntimeException的其他异常类或其子类,则被成为自定义检查异常。 可以在自定义异常类中添加构造方法、成员变量和成员方法。

public class MyException extends Exception{
	public MyException() {
	}
	public MyException(String message){
		super(message);
	}
public static void main(String[] args) {
		try {
			throw new MyException("这是一个自定义的异常");
		} catch (MyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

关于方法重写

子类重写父类的方法,重写后的方法不能比父类被重写的方法抛出更多异常。

Exception类的常用方法

1、String getMessage():返回异常的详细信息。
2、String toString():返回异常的描述,包括类名、详细信息。
3、void printStackTrace():打印出异常发生的路径,以及引起异常的方法调用的序列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值