CGBTN2108-DAY09总结复习

Posted 程序媛 泡泡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGBTN2108-DAY09总结复习相关的知识,希望对你有一定的参考价值。

Day09总结复习

1.异常

1.1 异常的继承结构

异常层次中的根节点Throwable

  1. Error : 目前我们编码解决不了的问题
  2. Exception : 通常可以通过编程解决的问题
    1)编译时异常 : 不用运行就已经报错了,比如,少写了分号/父类对象调用子类的特有功能。。。
    2)运行时异常 : RunTimeException,编写以及保存的时候没有报错,但是在执行中报错了
    注意: 运行时异常是可以通过编译的,不强制要求处理,方法上有默认抛出RunTimeException

1.2 异常处理方案

  1. 捕获处理try-catch : 自己解决,格式:
try{
    可能会出现异常的所有的代码
}catch(预测的异常类型  异常名字){
    如果匹配到了我们预测的异常类型,就执行此处异常的处理方案
}
  1. 向上抛出throws :在本方法不解决这个问题,谁来调用这个方法,谁解决问题,格式:
public void play() throws 异常类型1,异常类型2 {}

注意:我们一般不把异常直接抛给main(),因为调用main()的是虚拟机,没人解决了

1.3 巩固练习

package cn.tedu.review;

import java.util.InputMismatchException;
import java.util.Scanner;

/*本类用于复习异常的解决方案*/
public class TestException {
    public static void main(String[] args) {
        //1.调用方法,求两个整数除法的结果
        //method1();//try-catch分别单独处理了两个子类型异常
        //method2();//try-catch使用多态,用父类型异常做统一处理
        //method3();//throws本方法不处理异常,将异常抛出
        /*main()不能直接调用method3(),因为实际上被抛出的问题没有被解决,该报错还报错*/
        f();//用来在main()调用method3()之前,处理掉问题
    }
    private static void f() {
        try{
            method3();//调用方法3,即使它抛出异常,我们也在此处处理掉了,不会抛给main()
        }catch (Exception e){
            System.out.println("数据不对!");
        }
    }
    //private static void method3() throws ArithmeticException,InputMismatchException{
    private static void method3() throws Exception{
        System.out.println("输入第一个数:");
        int a = new Scanner(System.in).nextInt();
        System.out.println("输入第二个数:");
        int b = new Scanner(System.in).nextInt();
        System.out.println(a/b);
    }

    private static void method2() {
        try{
            System.out.println("输入第一个数:");
            int a = new Scanner(System.in).nextInt();
            System.out.println("输入第二个数:");
            int b = new Scanner(System.in).nextInt();
            System.out.println(a/b);
        //不管是子异常:算术异常还是输入不匹配异常,都可以被Exception匹配到
        }catch (Exception e){
            //提供的通用的解决方案
            System.out.println("您输入的数据不正确,请重新输入!");
        }
    }
    //ArithmeticException--除数为0
    //InputMismatchException--接收的数据类型不是整形
    /*解决方案一:*/
    private static void method1() {
        try{
            System.out.println("输入第一个数:");
            int a = new Scanner(System.in).nextInt();
            System.out.println("输入第二个数:");
            int b = new Scanner(System.in).nextInt();
            System.out.println(a/b);
        //针对于算术异常-子异常 特有的解决方案:
        }catch (ArithmeticException e){
            System.out.println("除数不能为0!");
        //针对于与输入不匹配异常-子异常 特有的解决方案
        }catch (InputMismatchException e){
            System.out.println("请输入整型的数据:");
        }
    }
}

2.抽象

2.1 抽象类

  1. 被关键字abstract修饰的类是抽象类
  2. 一旦一个类中包含了抽象方法,那么这个类必须被声明成一个抽象类
  3. 抽象类中的方法不做限制,非常自由:全普 / 全抽 / 半普半抽
  4. 抽象类不可以实例化–创建对象
  5. 抽象类有构造方法,它自己不用,但是为了子类创建对象时调用
  6. 如果一个子类继承了抽象父类,那么有两种解决方案:
    1)作为一个抽象子类:不实现/实现部分抽象父类的抽象方法,躺平
    2)作为一个普通子类:需要实现抽象父类的全部抽象方法,还债

2.2 抽象方法

  1. 被关键字abstract 修饰的方法就是抽象方法
  2. 抽象方法没有方法体{ },直接以分号结束

2.3 巩固练习

package cn.tedu.review;
/*本类用于复习抽象类与抽象方法*/
public class TestAbstract {
    public static void main(String[] args) {
        //5.创建子类对象进行测试
        CGBTeacher c = new CGBTeacher();
        ACTTeacher a = new ACTTeacher();
        //报错:抽象类不可以实例化
//        Teacher t = new Teacher();
//        SCDTeacher s = new SCDTeacher();
        c.ready();
        c.teach();
        a.ready();
        a.teach();
        //6.1创建多态对象进行测试
        //父类引用指向子类对象
        //编译(保存)看左边 运行(执行)看右边
        Teacher t = new CGBTeacher();
        Teacher t2 = new ACTTeacher();
        t.ready();
        t2.ready();
        t.read();//子类并没有重写这个方法,所以执行的是父类的功能
        t2.read();//子类并没有重写这个方法,所以执行的是父类的功能
    }
}
//1.定义抽象类老师类,并在老师类里提供两个抽象方法
abstract class Teacher{
   public abstract void ready();
   public abstract void teach();
   //6.2定义一个父类的普通方法
    public void read(){
        System.out.println("百年树人");
    }
}
//2.定义普通子类1:实现父类中未实现的方法
class CGBTeacher extends Teacher {
    @Override
    public void ready() {
        System.out.println("正在备课互联网架构与微服务全家桶");
    }
    @Override
    public void teach() {
        System.out.println("正在讲课互联网架构与微服务全家桶");
    }
}
//3.定义普通子类2:实现父类中未实现的方法
class ACTTeacher extends Teacher{
    @Override
    public void ready() {
        System.out.println("正在备课基础加强与框架加强");
    }
    @Override
    public void teach() {
        System.out.println("正在授课基础加强与框架加强");
    }
}
//4.定义抽象子类--实现了抽象父类的部分功能
abstract class SCDTeacher extends Teacher{
    @Override
    public void ready() {
        System.out.println("正在备课大数据Scala");
    }
}

以上是关于CGBTN2108-DAY09总结复习的主要内容,如果未能解决你的问题,请参考以下文章

CGBTN2108-DAY04总结复习

CGBTN2108-DAY12总结复习

CGBTN2108-DAY10总结复习

CGBTN2108-DAY14总结复习

CGBTN2108-DAY13总结复习

CGBTN2108-DAY08总结复习