Java中的异常处理机制

     

一、简单原理

  •  java把所有非正常情况分成两种:异常(Exception)和错误(Error),都是继承自Throwable父类。
  •  1.Error错误:一般是指虚拟机相关的问题,如系统崩溃,虚拟机出错误等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常不处理。
  •  2.Exception异常:指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。
  • 我们所需要关心的是Exception. Execption可以分为java标准定义的异常和程序员自定义异常2种.

  • 1.一种是当程序违反了java语规则的时候,JAVA虚拟机就会将发生的错误表示为一个异常.这里语法规则指的是JAVA类库内置的语义检查。
  • 2.另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是Thowable的子类。


通常,Java的异常(包括Exception和Error)分为可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)





二、关键字

在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常

java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。

         1.try:它里面放置可能引发异常的代码

         2.catch:后面对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块。

         3.finally:主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件),异常机制总是保证finally块总是被执行。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者   throw等终止方法的语句,则就不会跳回执行,直接停止。

         4.throw:用于抛出一个实际的异常,可以单独作为语句使用,抛出一个具体的异常对象。

         5.throws:用在方法签名中,用于声明该方法可能抛出的异常。



抛出异常:1.当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

                 2.任何Java代码都可以抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运行时系统。无论是谁,都可以通过Java的throw语句抛出异常。

                 3.从方法中抛出的任何异常都必须使用throws子句。

                 

public class ThrowCasecade {

	public void m1(){
		try {
			m2();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void m2() throws Exception {
		System.out.println("m2");
		try {
			m3();
		} catch (IOException e) {
			//转换为特定的异常,以便于上层调用的方法理解该异常
			e.printStackTrace();
			throw new Exception();
		}
	}

	private void m3() throws IOException {
		System.out.println("m3");
		m4();
	}

	private void m4() throws IOException {
		System.out.println("m4");
		m5();
	}

	private void m5() throws IOException {
		System.out.println("m5");
		throw new IOException("文件未找到");
	}

	public static void main(String[] args) throws IOException {
		new ThrowCasecade().m1();
	}

}


捕获异常:1.一个方法所能捕捉的异常,一定是Java代码在某处所抛出的异常。简单地说,异常总是先被抛出,后被捕捉的。

                 2.捕捉异常通过try-catch语句或者try-catch-finally语句实现。

 

                  


总体来说,Java规定:对于可查异常必须捕捉(trycatch)、或者声明(throws)抛出(throw)。允许忽略不可查的RuntimeException和Error。

JAVA语言如何进行异常处理

执行步骤:

1.如果执行try块中的业务逻辑代码时出现异常,系统自动生成一个异常对象,该异常对象被提交给java运行环境,这个过程称为抛出(throw)异常。 
2.当java运行环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的cathc块并把该异常对象交给catch块处理,那这个过程称为捕获(catch)异常;如果java运行时环境找不到捕获异常的catch块,则运行时环境终止,jav程序也将退出。

注意

注意1:不管程序代码块是否处于try块中,甚至包括catch块中代码,只要执行该代码时出现了异常,系统都会自动生成一个异常对象,如果程序没有为这段代码定义任何catch块,java运行环境肯定找不到处理该异常的catch块,程序肯定在此退出。 
注意2:try块后可以有多个catch块,try块后使用多个catch块是为了针对不同异常类提供的不同的异常处理方式。当系统发生不同意外情况时,系统会生成不同的异常对象,java运行时就会根据该异常对象所属的异常类来决定使用哪个catch块来处理该异常。 
注意3:通常情况下,如果try块被执行一次,则try块后只有一个catch块会被执行,绝不可能有多个catch块被执行,除非在循环中使用类continue开始下一次循环,下一次循环又重新运行了try块,这才可能导致多个catch块被执行。 
注意4:进行异常捕获时,一定要记住先捕获小的异常,再捕获大的异常。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

启四

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值