黑马程序员——Java异常

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


       程序出行错误,是很常见的一个现象,需要我们根据终端console提供的异常输出信息,判断错误的原因。

  

一. 错误分类      

        Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception 。
        1.   Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的严重错误 ,导致 JVM 无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。
        2.   Exception :表示可恢复的例外,这是可捕捉到的。


二 . Exception异常分类

          1. Java自带的异常分类:

          分为  运行时异常(RuntimeException)和 检查性异常checked exception(非运行时异常)。 

            (1)RuntimeException类:

             是Exception类的子类,它叫做运行时异常,Java中的所有运行时异常都会直接或者间接地继承自RuntimeException类。

             当出现这样的异常时,总是由虚拟机 接管。比如:我们从来没有人去处理过 NullPointerException 异常,它就是运行时异常,并且这种异常还是最常见的异常之一。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由 Thread.run() 抛出 ,如果是单线程就被 main() 抛出 。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是 Exception 的子类,也有一般异常的特点,是可以被 Catch 块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。


             (2)检查性异常checked exception

                Java中凡是继承自Exception,而不继承自RuntimeException类的异常都是非运行时异常。我们经常遇到的 IO 异常,以及 SQL 异常都是这种异常。 对于这种异常, JAVA 编译器强制要求我们必需对出现的这些异常进行catch处理 。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆 catch 块去处理可能的异常。


          (3)常见的异常有:       

                      (a) java.lang.NullPointerException(空指针异常):调用了未经初始化的对象或者是不存在的对象

                      (b) java.lang.ClassNotFoundException: 指定的类不存在

                      (c) java.lang.NumberFormatException:字符串转换为数字异常

                      (d) java.lang.IndexOutOfBoundsException:数组下标越界异常

                      (e)java.lang.IllegalArgumentException:方法的参数错误

                      (f) java.lang.IllegalAccessException:没有访问权限

                      (g) java.lang.ArithmeticException:数学运算异常

                      (h) java.lang.ClassCastException: 数据类型转换异常

                      (i)  java.lang.FileNotFoundException:文件未找到异常

                      (j)java.lang.ArrayStoreException:数组存储异常

                    (k) java.lang.OutOfMemoryException:内存不足错误

                      (l)java.lang.NoClassDefFoundException:未找到类定义错误

          2. 自定义异常

          自定义异常,通常就是定义一个类,去继承Exception类或者它的子类。


二. Java异常处理代码(一般用于检查性异常exception)

         对于检查性异常exception,也就是非运行时异常,必须处理,否则无法通过编译。异常处理一般有以下两种。

        1. 用try...catch语句来处理

    try
    {
         // 可能发生异常的代码
        // 如果发生了异常,那么异常之后的代码都不会被执行
    }
    catch (Exception e)
    {
        // 异常处理代码
    }
    .....此处可以有多个catch语句,分别处理不同的异常
    finally
    {
        // 不管有没有发生异常,finally语句块都会被执行
    }
       2. 在产生异常的方法声明后面写上throws 某一个Exception类型

              如throws Exception,将异常抛出到外面一层去,也就是调用此方法的那个方法来处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值