码迷,mamicode.com
首页 > 编程语言 > 详细

java的异常体系

时间:2019-10-27 16:39:07      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:alt   poi   转换   inter   内存泄露   访问   bounds   判断   递归函数   

一,强制转换

     对于强制转换来说,虽然被叫做是强制转换,当但它也只能是将它的子类强制转换成他自己的类型,而不能基类强制转换他自己的类型。

例如:

1.

技术图片

 

 

 此处Test()继承了Student类,即Test()是Student类的子类。

 运行结果如下:

技术图片

 

 

 没有报强制转换的错误,说明类型转换成功。

2.

技术图片

 

 

运行结果如下:

 

技术图片

 

 

 运行后报错Object cannot be cast to Student,说明强制转换不支持将基类转换成派生类。

3.

技术图片

 

 

 运行结果如下:

技术图片

 

 

 

 

 同样的说明强制转换不支持将基类转换成派生类。

 

二,异常

 1.常见的几种异常:

  StackOverFlow  栈溢出错误:写递归函数的时候,没有定义递归结束的条件。

  ArrayIndexOutofBounds   数组越界:如新new一个数组,int arr=new int[4];  当访问arr[4]的时候,会出现数组越界的错误。

  NullPointerException   空指针异常 : 引用变量没有引用有效的对象。

  ClassCastException   类型转化错误:如将基类强制转换为派生类。

  OutOfMemory(OOM)  堆内存耗尽,没有可用的对内存。(一般开发大工程会出现,或内存泄露时)

 

2.异常体系:

 技术图片

 

 

 

 

3.异常的处理:

      java程序如果不处理抛出的异常,那么最终会抛给JVM,JVM判断当前Java进程有一个未被处理的异常,会直接结束Java进程。如下面的程序:

********************************************************************************

技术图片

 

 

 *********************************************************************************************************

技术图片

**********************************************************************************************************

 

 

 

      异常的关键字:

           try:一般把可能发生异常的代码,放在try语句的大括号里。

   catch:紧跟try语句之后,可以同时出现多个catch语句,用来蒱获不同类型的异常。

        finally:不管java程序有没有发生异常,finally语句块中的代码都会被执行到,所以一般把资源释放的代码都放在finally语句块中。

   throw:抛出指定类型的异常对象(异常内容可自拟,默认为null)。eg: throw new IllegalArgumentException("请输入:");

                      另外还可以抛出自定义类型的异常对象。此时要新new 一个class,要写明继承的对象(RuntimeException或Exception)

             *****************************************************************

              注意要重写getMessage()方法。

              技术图片

 

                 然后抛异常和接收异常同指定异常类似。

          技术图片

 

 

               此处相当new了一个对象,然后将参数传入,调用构造函数进行初始化。

 

 

                    

                在java代码中通过throw抛出的异常对象,是沿着函数的调用链逆向抛出的。因为在Java中,函数的执行顺序是:JVM -> main -> func1 ->func2 ->……

 

所以异常就是沿着  func2 -> func1 -> main ->JVM 抛的。除非有人处理了异常,否则当被抛到JVM时,程序运行就会被中断。

             ****************************************************************

                    抛出异常:

 

                         技术图片

 

 

 

                    接收异常:

                   技术图片

 

 

                          ********************************************************************************************

 

           throws:当函数不打算处理异常时,把异常抛给调用方。

                     技术图片

 

 

                        这个方法名后面放throws ,意味着把异常抛给了main函数。

                       技术图片

 

 

                       在main方法中对异常进行了接收处理,此时就不会继续往JVM抛了。所以程序运行成功没有报错。

                   技术图片

 

 4.总结

    error 是JVM抛出的的,是不可挽回的。

    Exception 是应用程序抛出的,是可挽回的。

    异常Exception分为可检测异常和不可检测异常。

         ♥其中不可检测异常,是运行阶段才抛出的异常,编译阶段可以选择性的处理异常。

         ♥其中可检测异常,是编译阶段必须处理的异常否则代码编译不通过。处理的方法有两种:1,把可能发生的异常放在try  catch 块中处理。2,在函数名后面通过throws异常类型,把可能发生的异常抛给函数的调用方来处理。

 

 

       

                   

 

java的异常体系

标签:alt   poi   转换   inter   内存泄露   访问   bounds   判断   递归函数   

原文地址:https://www.cnblogs.com/ljl150/p/11745595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!