zoukankan      html  css  js  c++  java
  • java学习第九天

    目标

    异常(5个关键字 throw try catch finally throws )

    一、概念

    异常: 非正常情况,例外。人为什么会生病?内因+外因。内因: 身体不够健壮—>锻炼身体增强体质。外因: 与外界存在联系,如刮风下雨、雾霾–>做好防护工作。一旦真生病后怎么办?小病: 自己买药、泡药、吃药,后面的工作还可以继续。大病: 只能去医院,病交给医生,停止后续的工作。交给医生处理,转上级医院;医生来治。

    程序与人身体一致,分为两种: Error 和Exception. 错误: 系统奔溃,不是程序的问题,比如JVM内存溢出、断电。 Exception: 非正常情况,RuntimeException(内因) 和CheckedException(外因).内因指程序不够健壮,增强健壮性,靠程序的修养加以增强,日积月累的过程。CheckedException称为编译时异常,必须处理的异常,一般与外界存在联系。如: 与文件的交互,文件是放在操作系统的硬盘上,做好防护工作,防止文件不可操作或者没有权限;与数据库的交互,数据库在交互的过程中可能存在访问失败,同样要做好防护工作。

    如何区分? 查看继承链,如果一个类继承 RuntimeExcepton 就是运行时异常,否则没有继承RuntimeException,就是非运行时异常、编译时异常。

    每一个方法内部都可能存在RuntimeException

    二、体系

    异常也是类,之所以出现异常,内部产生了异常对象(jvm内部产生的或程序员编写的异常),异常是“使程序中断的指令流”。体系为:

    Throwable

    1、Error: 称为错误,非程序问题,一般不用程序员处理

    2、Exception: 称之为异常,程序问题,程序员来处理。

    1)、RuntimeException: 运行时异常,内因,程序不够健壮,通过编写代码来解决。每个方法内部都可能存在异常。

    2)、CheckedException: 编译时异常,没有继承RuntimeException,都是此异常。通过异常机制来解决

    三、Throwable

    Throwable为异常或错误的基类,一般不会使用它创建对象,掌握发生多态时,三个方法即可

    1、String toString()  : 异常对象的字符表现形式(简短)

    2、String getMessage():异常对象的字符表现形式(详细)

    3、printStackTrace() : 跟踪异常

    打印与跟踪的异常过程中,与正常的输出之间没有绝对的先后顺序,分别为不同的路径(多线程)。

    四、RuntimeException

    运行时异常,指程序不够健壮。

    1、NullPointerException

    “只有引用没有对象”,访问了对象的信息。

    如:

    推荐的解决方案: 增强健壮性

    2、ArithmeticException

    违背数学的常识,如”除数不能为0”

    如:

    推荐的解决方案: 增强健壮性

    3、ClassCastException

    发生多态时,向下类型转换时出现的异常。

    推荐的解决方案: 增强健壮性

    注意: 每个方法都存在一个RuntimeException

    五、CheckedException

    此类异常是指程序与外界存在交互,必须做好防护工作,必须处理的异常,如果不处理,编译错误,也称之为”编译时异常”。

             从继承链上看,凡是没有继承RuntimeException都是此类异常。

             此类异常不能通过程序的健壮性来处理,处理方式,使用异常机制。

    1、对内捕获处理

    在方法内部自行处理,好处: 处理完成异常之后,后续还可以执行,一般这样异常,不影响程序的整个的运行。

    如定位文件时,文件不存在FileNotFoundException

    try..catch

    读取文件时,IOException

    多个catch

    当出现一个try.多个catch配对时,避免多态出现,先逮小的后逮大的。

    finally

    最终的,释放资源,通知外部可以释放资源了。

    区别: finally finalize final 三者的区别

    关系

    try必须存在,最多一个,不能单独出现。

    catch: 可以没有(必须存在finally),也可以多个

    finally: 可以没有(必须存在catch),最多一个

    常见的配对形式

    try.catch

    try..finally

    try..catch..finally

    2、对外声明处理

    在方法内部不处理,交给方法的调用处理,好处:简单,一般这样异常,交给程序统一异常处理层来处理。使用  throws ,方法对外声明的异常。

    格式:

           方法的调用处来处理

             1)、方法调用处自己处理try..catch

             2)、再往上声明,一直声明到最上层 throws。

    六、异常产生的原因

    1、系统内部对外声明的异常

    此类异常由JVM虚拟对外声明出来的,一旦出现异常,可能给处理处抛出异常对象(虚拟机new处来的对象)。

    2、方法内对外抛出异常

    throw:抛出异常对象,抛出公司业务的自定义异常

    方法内存在 throw 检查时异常,方法的声明出必须存在throws

    思考: 一个方法如何结束?

    1、  正常执行完毕

    2、  return

    3、  throw

    4、  停止虚拟机 :         System.exit(-1);

    七、重写与异常

    重写

    1、子类中方法签名相同;

    2、返回类型|异常<= à基本|void 必须相同;引用类型<=

    3、可见性: >=

    异常: 子类的异常必须在父类的异常范围内,不能比父类方法异常大,不是指个数。

    1、  如果父类的方法没有异常,子类不能声明CheckedException

    2、  如果父类中存在CheckedException,子类异常只能<=

    八、自定义异常

    少数的公司,根据业务自定义业务异常、分层异常。定义格式

    publicclassXxxExceptionextends Exception {

    XxxException(String msg){

     super(msg)

    }

    }

    如:

    使用方式与jdk内置的异常,同理:

    总结

    1、  一张体系图

    2、  try catch finally throw throws

  • 相关阅读:
    [bigdata] storm集群安装及测试
    [bigdata] kafka集群安装及测试
    [bigdata] spark集群安装及测试
    [bigdata] 使用Flume hdfs sink, hdfs文件未关闭的问题
    [bigdata] 启动CM出现 “JDBC Driver class not found: com.mysql.jdbc.Driver” 以及“Error creating bean with name 'serverLogFetcherImpl'”问题的解决方法
    [JavaEE]设计模式之SOLID原则
    [Android]Volley源码分析(五)
    [Android]Volley源码分析(四)
    [Android]Volley源码分析(三)
    python学习Day13--生成函数
  • 原文地址:https://www.cnblogs.com/yuyufeng/p/5335981.html
Copyright © 2011-2022 走看看