java 异常处理机制,throws与throw,try-catch-finally

版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/83592685

  1. 在编写程序时,经常要在可能出现错误的地方加上检测的代码,如进行x/y运算时,要检测分母为0,数据为空,输入的不是数据而是字符等。过多的分支会导致程序的代码加长,可读性差。因此采用异常机制。

1.Java异常处理

Java采用异常处理机制,将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁,并易于维护

  1. Java提供的是异常处理的抓抛模型。
  2. Java程序的执行过程中如出现异常,会生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出==(throw)==异常。
  3. 异常对象的生成
    1.由虚拟机自动生成:程序运行过程中,虚拟机检测到程序发生了问题,如果在当前代码中没有找到相应的处理程序,就会在后台自动创建一个对应异常类的实例对象并抛出——自动抛出
    2.由开发人员手动创建:Exception exception = new ClassCastException();——创建好的异常对象不抛出对程序没有任何影响,和创建一个普通对象一样
  4. 如果一个方法内抛出异常,该异常对象会被抛给调用者方法中处理。如果异常没有在调用者方法中处理,它继续被抛给这个调用方法的上层方法。这个过程将一直继续下去,直到异常被处理。这一过程称为捕获(catch)异常。
  5. 如果一个异常回到main()方法,并且main()也不处理,则程序运行终止。
  6. 程序员通常只能处理Exception,而对Error无能为力。
  7. 异常处理是通过try-catch-finally语句实现的。
try{
	......	//可能产生异常的代码
}
catch( ExceptionName1 e ){
	......	//当产生ExceptionName1型异常时的处置措施
}
catch( ExceptionName2 e ){
	...... 	//当产生ExceptionName2型异常时的处置措施
}  
[ finally{
	......	 //无论是否发生异常,都无条件执行的语句
		}  ]

  1. try
    捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块中。
  2. catch (Exceptiontype e)
    在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

    如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类作为catch的参数。
    比如:可以用ArithmeticException类作为参数的地方,就可以用RuntimeException类作为参数,或者用所有异常的父类Exception类作为参数。但不能是与ArithmeticException类无关的异常,如NullPointerException(catch中的语句将不会执行)。

  3. 注:try是一个独立的代码块,在其中定义的变量只在该变量块中有效。
    如果在try以外继续使用,需要在try建立引用。在try对其进行初始化。IO,Socket就会遇到。
  4. 捕获异常的有关信息:
    与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。
    getMessage() 获取异常信息,返回字符串
    printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
    信息
  5. finally
    A.捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。
    B.不论在try代码块中是否发生了异常事件,catch语句是否执行,catch语句是否有异常,catch语句中是否有return,finally块中的语句都会被执行。
    C.finally语句和catch语句是任选的
    D.处理过程:
    Try中检测到异常会将异常对象传递给catch,catch捕获到异常进行处理。
    Finally里通常用来关闭资源。比如:数据库资源,IO资源等。

2.try-catch-finally的程序流程图

流程

3.关键解读

排污

4.demo

  1. 可以看我的其他博客。

5.不捕获异常时的情况

  1. 前面使用的异常都是RuntimeException类或是它的子类,这些类的异常的特点是:
    即使没有使用try和catch捕获,Java自己也能捕获,并且编译通过 ( 但运行时会发生异常使得程序运行终止 )。
  2. 如果抛出的异常是IOException等类型的非运行时异常,则必须捕获,否则编译错误。也就是说,我们必须处理编译时异常,将异常进行捕捉,转化为运行时异常

猜你喜欢

转载自blog.csdn.net/qq_34626097/article/details/83592685