java基础之异常处理

1.  java的异常体系包含在java.lang这个包默认不需要导入。

2.  java异常体系

           |——Throwable  (实现类描述java的错误和异常)

               |——Error(错误)一般不通过代码去处理。

               |——Exceprion(异常)

                      |——RuntimeException(运行时异常)

                      |——非运行时异常

Throwable类

toString() 输出该异常的类名。

getMessage() 输出异常的信息,需要通过构造方法传入异常信息(例如病态信息)。

printStackTrace() 打印栈信息。


错误(Error)

它指的是一个合理的应用程序不能截获的严重的问题。大多数都是反常的情况。错误是JVM的一个故障(虽然它可以是任何系统级的服务)。所以,错误是很难处理的,一般的开发人员(当然不是你)是无法处理这些错误的。比如内存溢出.


运行时异常和非运行时异常

RuntimeException

这些异常时可以通过程序员的良好编程习惯进行避免的

1:遇到运行时异常无需进行处理,直接找到出现问题的代码,进行规避。

2:就像人上火一样牙疼一样,找到原因,自行解决即可

3:该种异常编译器不会检查程序员是否处理该异常

4:如果是运行时异常,那么没有必要在函数上进行声明。

非运行时异常(受检异常)

如果出现了非运行时异常必须进行处理throw或者try{}catch(){}处理,否则编译器报错。


自定义异常

继承Exception 提供有参无参构造,调用父类有参构造初始化


程序中的异常处理

自行处理

try{//可能发生异常的代码 }catch(异常类 变量名){//处理}。

抛出处理

定义一个功能,进行除法运算,例如(div(int x,int y))如果除数为0,进行处理。

功能内部不想处理,或者处理不了。就抛出使用throw new Exception("除数不能为0"); 进行抛出。抛出后需要在函数上进行声明,告知调用函数者,我有异常,你需要处理如果函数上不进行throws 声明,编译会报错。例如:未报告的异常 java.lang.Exception;必须对其进行捕捉或声明以便抛出throw new Exception("除数不能为0");


throw和throws的区别

相同:都是用于做异常的抛出处理的。

不同点:

1.  使用的位置: throws 使用在函数上,throw使用在函数内

2.  后面接受的内容的个数不同:

     1.  throws 后跟的是异常类,可以跟多个,用逗号隔开。

     2.  throw 后跟异常对象。


finally

1: 实现方式一:

try{ // 可能发生异常的代码 } catch( 异常类的类型 e ){ // 当发生指定异常的时候的处理代码}catch...     

           比较适合用于专门的处理异常的代码,不适合释放资源的代码。

2:实现方式二:

           try{ } catch(){} finally{ //释放资源的代码}

           finally块是程序在正常情况下或异常情况下都会运行的。

           比较适合用于既要处理异常又有资源释放的代码

3:实现方式三

           try{ }finally{ //释放资源}

           比较适合处理的都是运行时异常且有资源释放的代码。

4:finally:关键字主要用于释放系统资源。

               1:在处理异常的时候该语句块只能有一个。

           2:无论程序正常还是异常,都执行finally。

5:finally是否永远都执行?

           1:只有一种情况,但是如果JVM退出了System.exit(0),finally就不执行。

           2:return都不能停止finally的执行过程。

注意

1.  try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、try...finally三种结构。

2.  catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。

3.  try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。

4.   多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。(子类在上,父类在下)。

5.   throw语句后不允许有紧跟其他语句,因为这些没有机会执行。

6.   如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。

你可能感兴趣的:(java基础之异常处理)