CBG 2108班day09学习内容总结

本文详细讲解了Java中的异常继承结构,区分Error和Exception,并介绍了编译时异常和运行时异常的处理。通过实例演示了try-catch语句的应用,探讨了抽象类和抽象方法的概念,以及如何在编程中使用多态和向上抛出异常。适合初学者理解Java异常管理和面向对象设计原则。
摘要由CSDN通过智能技术生成

Day09

1.异常

1.1 异常的继承结构

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

1.2 异常处理方案

1.捕获处理try-catch:自行解决,格式:

try{
	可能出现异常的所有代码
}catch(预测出现的异常类型 异常名){
	如果匹配到了我们预测的异常类型,就执行此处的异常处理方案
}

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

1.3 巩固练习

package day09;

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();
        }catch(Exception e){
            System.out.println("数据有误!");
        }
    }
    /*解决方案3:向上抛出异常
    注意:我们一般不把异常直接抛出给main(),因为调用main()的是虚拟机,没人去解决了*/
    //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);
    }

    /*解决方案2:使用多态,用父类型异常Exception统一处理*/
    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--算术异常
    //by zero--算术异常的原因:除数为0
    //InputMismatchException--输入不匹配异常:由于输入的数不是int类型
    //处理输入不匹配异常需要导包
    /*解决方案1:捕获处理,把可能出现的异常分别进行处理*/
    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.抽象abstract

2.1 抽象类

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

2.2 抽象方法

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

2.3 巩固练习

package day09;

public class TestAbstract {
    public static void main(String[] args) {
        //4.创建子类测试
        CGBTeacher c = new CGBTeacher();
        // 报错:抽象类不可实例化
        //ACCTTeacher a = new ACCTTeacher();
        //Teacher t = new Teacher();
        c.ready();
        c.teach();
        //5.创建多态对象测试
        //编译看左边,运行看右边
        Teacher t = new CGBTeacher();
        t.read();//子类中没有重写,所以执行父类的功能
        t.ready();
        t.teach();
        //t.eat();//报错:Cannot resolve method 'eat' in 'Teacher'
        //多态对象不能使用子类中的特有方法
    }
}
//1.定义抽象父类-老师类,并提供两种抽象方法
abstract class Teacher{
    public abstract void ready();//备课
    public abstract void teach();//授课
    public void read(){
        System.out.println("十年树木,百年树人");
    }
}
//2.定义普通子类:实现父类中未实现的方法
class CGBTeacher extends Teacher{

    @Override
    public void ready() {
        System.out.println("正在备课互联网架构与微服务框架全家桶");
    }

    @Override
    public void teach() {
        System.out.println("正在授课互联网架构与微服务框架全家桶");
    }
    public void eat() {
        System.out.println("干饭了~");
    }
}
//3.定义抽象子类:部分实现父类的方法
abstract class ACCTTeacher extends Teacher{

    @Override
    public void ready() {
        System.out.println("正在备课基础加强与框架加强");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值