当前位置:   article > 正文

【七日阅书】5 抽象和接口、异常处理《Java程序设计与计算思维》_java 异常相关书籍

java 异常相关书籍

一、前言

【七日阅书】1 计算思维和Java特性《Java程序设计与计算思维》

【七日阅书】2 Java的数据类型和流程控制《Java程序设计与计算思维》

【七日阅书】3 字符串、数组、集合、泛型《Java程序设计与计算思维》

【七日阅书】4 理解面向对象《Java程序设计与计算思维》

二、抽象

1.如何理解抽象

抽象的意义在于创建标准,实现抽象类的类必须实现抽象类的抽象方法。

比如猫都会叫,但是叫声有差别,那么定义了抽象类"猫"之后,我要想做一个品种猫,就必须实现猫叫的方法。

在实现抽象类的过程中,也就是实现对标准的统一,逻辑上也就避免了出错。

2.抽象类的注意事项

image-20211206112344351

3.实际代码帮助理解

首先是定义抽象类,我加了一些注释帮助理解。

package com.example.demo.tool;

/**
 * 猫的抽象类
 */
abstract class CatAbstract {

    //构造函数
    CatAbstract(){
        System.out.print("我是抽象类的构造函数\r\n");
    }

    abstract public void jump(); //抽象方法,没有具体实现

     public void run(){
         System.out.print("我是抽象类的函数,跑起来了!\r\n");
     }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

然后是定义类作为抽象类的实现,注意对于抽象类内函数也是要实现的。

package com.example.demo.tool;

/**
 * 天津猫是抽象猫的实现,我家的猫就是从天津拿来的
 */
public class TjCat extends CatAbstract {

    @Override
    public void jump() {
        System.out.print("我可跳了啊\r\n");
    }

    public void kuaiban(){
        System.out.print("我可会打快板\r\n");
    }

    @Override
    public void run() {
        super.run();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

调用之后的输出。

image-20211207110443255

三、接口

1.接口和抽象的区别

  • 接口只能定义成员常数或抽象的成员、方法
  • 抽象类至少包含一个完整方法,接口包含的都是抽象方法
  • 接口支持多重继承

接口的存在意义和抽象类相同,都是为了遵循设计规范,避免出错。

2.接口的注意事项

image-20211206112930827

3. 实际代码帮助理解

首先是定义接口类,我也加了一些注释。演示支持实现多接口,我做了两个接口。

/**
 * 猫的接口类
 */
interface CatInterface {

    void run(); //由于必须所有方法都是public,所以public没必要写上

    void jump();
}


interface CatInterface2 {

    int tailNum = 1;
    
    void eat();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

实现类实现了两个接口类的方法。

/**
 * 接口类的实现,支持实现多接口
 */
public class TianjinCat implements CatInterface,CatInterface2 {
    @Override
    public void run() {
        System.out.print("我可跑了啊\r\n");
    }

    @Override
    public void jump() {
        System.out.print("我有"+ String.valueOf(tailNum) +"条尾巴!\r\n");
        System.out.print("我可跳了啊\r\n");
    }

    @Override
    public void eat() {
        System.out.print("我可吃了啊\r\n");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

控制器内直接实例化实现类。

        TianjinCat tianjinCat = new TianjinCat();
        tianjinCat.eat();
        tianjinCat.jump();
        tianjinCat.run();
  • 1
  • 2
  • 3
  • 4

实际运行结果如下。

image-20211207132013329

四、异常

本书中被成为例外处理,异常和错误。

1.错误

image-20211206113648511

image-20211206113702771

image-20211206113715047

2.异常

异常则是发生例外鞥马上处理的错误。

image-20211206113951546

image-20211206114007950

image-20211206114021572

3.捕获异常并处理

可以参考如下代码片段,通过对异常的捕获来抛出预期的异常。

    public static List<List<String>> readExcelToLines(byte[] bytes) {
        try (Workbook workbook = new XSSFWorkbook(new ByteArrayInputStream(bytes))) {
            return readLines(workbook);
        } catch (OLE2NotOfficeXmlFileException e) {
            try (Workbook workbook = new HSSFWorkbook(new ByteArrayInputStream(bytes))) {
                return readLines(workbook);
            } catch (IOException exception) {
                throw new RuntimeException(exception);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

五、总结

  • 抽象和接口,都是为了规范化整个项目,减少中间出错的风险。
  • 对异常的catch也是一种预期管理,让程序在自己的预期内运行。

六、源码地址

小雨青年 / Java Demo · CODE CHINA (gitcode.net)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/180358
推荐阅读
相关标签
  

闽ICP备14008679号