• day15 接口与异常


      接口

    是一种独立于类的新机制,它关注的是行为。

    接口的意义就体现在——让没有继承关系的类共享这些行为,各有各的具体实现。

    设计上:当我们发现一个或多个类的方法相同,又没有继承关系,则考虑接口。

    命名:***able   关键字:interface 

    属性:只能公共静态常量属性,就算不写关键字,也是默认三种情况。

    构造:接口不能有构造,接口不能产生对象。

    行为:只能是公共的抽象方法,即使不写修饰符,也是默认这种状况。

    在jdk1.7以上的版本中,允许接口拥有已经实现了的方法,但必须用default关键字修饰。

    接口的用处:1、让类实现接口,而且是多实现的。

                         类实现接口,使用implement关键字,并且重写接口中的抽象方法。

                         如果一个类实现一个接口,但没有重写全部的抽象方法,则这个类为抽象类。

                         类可以实现多个接口,只能是单继承。

                     2、接口可以继承接口,而且是多继承的。

                          设计原则:接口隔离原则(接口最小原则)尽量定义小接口。

                     3、应用多态——接口引用指向实现接口的类的对象。

                          如果类没有实现接口,不能用接口指向它的对象。

                          接口引用==拥有莫种能力的东西。

    抽象类和接口在设计上的区别:与生俱来(一脉相承)的行为写到抽象类中;附属添加的行为写到接口,接口尽量定义小接口。

    异常

    问题:包括异常(Exception)和错误(Error)。

    错误:程序不能用代码解决的问题。包括硬件问题、环境问题、系统问题等。

    异常:包括运行时异常和编译时异常(检查异常)。

    运行时异常:程序在运行期间出现的异常。像常见的空指针异常、数组下标越界、类型转换异常等。

    编译时异常:程序在编译时,有红线提示(unhandled Exception)信息的异常。不捕获就不能通过编译。

    异常处理机制:在程序发生异常的地方,jvm会产生一个异常对象,先暂停程序运行,然后往下看有没有捕获异常,如果没有,就返回方法的调用处,如果方法的调用处也没有捕获,就一层层往上返回,如果最后连main主方法都没有捕获异常,则返回JVM,jvm就会终止程序运行,并打印异常信息。期间任何一个环节捕获了异常,程序都能在捕获后的地方,继续执行。

    异常处理:1、预判提前处理异常发生的条件。

                  2、异常捕获try、catch

    try块、catch块:

    1、try块运行可能发生异常的程序,catch块判断可能发生的异常,并给出相应的处理措施。

    2、catch块一次只能捕获一个异常。

    3、多个catch块应从子到父的顺序抒写,否则子异常匹配不到。

    4、e.printStackTrace();语句可以在catch块中打印异常。

    5、try、catch可以与其它条件控制语句混合使用,使程序即使发生了异常,也能回到异常发生的地方继续执行。

    finally块不管是否发生异常,都要执行的代码。

    finally——资源的管理,通道的关闭。

    finally的优先级非常高,不管break、continue还是return都无法阻止它被执行,它在它们之前执行。唯一能阻止finally执行的是System.exit()。

    try、catch、finally都不能单独存在。

    try后面必有catch或finally。

    catch/finally前面必有try。

    抛异常

    我们可以在业务逻辑处产生一个异常对象,使用throw关键字抛出这个异常。

    当主动抛出的异常是一个编译时异常的时候,必须在编译期对本方法的调用者产生警告,需要在方法的声明处添加throws,表明该方法有可能发生异常。

    throws会影响到重写的规范——子类重写方法不能抛出比父类被重写方法范围更大的异常。

    throw和throws的辨析:

    1、throw和throws都是关键字,都属于异常处理部分的。

    2、throw是写在方法体中的,后面跟的是一个异常对象。

    throws是写在方法声明最后面的,后面跟的是一个或者多个异常类。

    3、当运行到throw这句代码的时候,就会真正发生抛出一个异常对象的动作。

    throws是在编译期警告本方法的调用者,有可能会发生哪些类型的异常。

    4、当一个方法体中有throw语句,不一定会有throws,除非throw后面跟的是编译期异常,那就必须写throws。

    自定义异常:

    三层架构:

    表示层    业务层      数据访问层

    1、自定义异常必须继承Exception。

    2、自定义异常至少有两个带参构造,一个带异常参,一个带字符串参,前者用于把其它异常类型转换为自定义异常,后者用于操作非jvm主动抛出的业务异常。

    3、可以给自定义异常提供拓展方法。

    一个完整的方法声明:访问修饰符 可选修饰符 返回类型 方法名(形参列表)throws抛出的异常列表。

  • 相关阅读:
    二叉链表(双叉链表)实现二叉树
    队列知识
    windows下Anaconda3配置TensorFlow深度学习库
    栈的顺序结构和链式结构实现
    Anaconda中配置Pyspark的Spark开发环境
    Scala学习笔记(3)-表达式归纳
    SparkR-Install
    推荐系统之最小二乘法ALS的Spark实现
    linux查看主机端口进程命令
    使用redis的五个注意事项
  • 原文地址:https://www.cnblogs.com/fengshaolingyun/p/6146461.html
Copyright © 2020-2023  润新知