异常、抽象类与接口


异常

1 概述

异常是一些用来封装错误信息的对象
它由异常的类型、提示信息、报错的行号提示三部分组成

2 catch 和 throws

异常处理只有两种方式: catch 和 throws,所以必须二选一
由于Java语法本身的特点,需要开发者事先考虑异常如何处理,也就是我们常说的:“未雨绸缪”
对于初级开发者来说,我们可能会捕获,但不处理异常

try{
        可能会抛出异常的代码
     }catch(异常类型 异常的名字){
        捕获到了异常,进行处理的解决方案
     }

底层异常,应该向前抛到前面处理
经验少时,不知道该在什么位置捕获处理,应该选择 throws
但是大家需要注意,在异常抛出时,有些异常比如运行时异常,可能并不会强制要求抛出此异常,调用时也没有报错显示需要额外处理,这个时候就需要大家平时多积累,掌握良好的编码习惯了,手动添加代码进行预处理,增强程序的健壮性了。

3 程序错误分为三种:

编译错误(checked异常);
运行时错误(unchecked异常);
逻辑错误;

  1. 编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。
  2. 运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。
  3. 逻辑错误是因为程序没有按照预期的逻辑顺序执行。异常也就是指程序运行时发生错误,而异常处理就是对这些错误进行处理和控制。
  4. 其实我们还可以手动针对逻辑错误执行异常的抛出动作,大家可以理解成方法return,只不过此处我们返回的是异常,格式:
if(逻辑错误有异常){
AException e = new AException(“提示消息”);
throw e;
}

4 throws 与 throw 的区别

throws
用在方法声明处,其后跟着的是异常类的名字
表示此方法会抛出异常,需要由本方法的调用者来处理这些异常
但是注意:这只是一种可能性,异常不一定会发生

throw
用在方法的内部,其后跟着的是异常对象的名字
表示此处抛出异常,由方法体内的语句处理
注意:执行throw一定抛出了某种异常

abstract 抽象类

特点:

abstract 可以修饰方法或者类
被abstarct修饰的类叫做抽象类,被abstract修饰的方法叫做抽象方法
抽象类中可以没有抽象方法
如果类中有抽象方法,那么该类必须定义为一个抽象类
子类继承了抽象类以后,要么还是一个抽象类,要么就把父类的所有抽象方法都重写
多用于多态中
抽象类不可以被实例化

abstract注意事项

抽象方法要求子类继承后必须重写
那么,abstract关键字不可以和哪些关键字一起使用呢?以下关键字,在抽象类中。用是可以用的,只是没有意义了。
1.private:被私有化后,子类无法重写,与abstract相违背。
2.static:静态优先于对象存在,存在加载顺序问题。
3.final:被final修饰后,无法重写,与abstract相违背。

接口( Interface )

特点:

通过interface关键字来定义接口
通过implements让子类来实现接口
接口中的方法全部都是抽象方法(JAVA8)
可以把接口理解成一个特殊的抽象类(但接口不是类!!!)
类描述的是一类事物的属性和方法,接口则是包含实现类要实现的方法
接口突破了java单继承的局限性
接口和类之间可以多实现,接口与接口之间可以多继承
接口是对外暴露的规则,是一套开发规范
接口提高了程序的功能拓展,降低了耦合性

使用

  1. 如果一个类没有明确指定父类,那么默认继承顶级父类Object,所以super()会自动调用Object类中的无参构造。
  2. 接口里是没有构造方法的
    在创建实现类的对象时默认的super(),是调用的默认Object的无参构造
  3. 接口不可以创建对象。
  4. 接口里没有成员变量,都是常量。所以,你定义一个变量没有写修饰符时,默认会加上:public static final
  5. 接口里的方法,默认就都是抽象的,如果你不写明是abstract的,那会自动补齐。例如:public abstract void save

总结:

  1. 类与类的关系
    继承关系,只支持单继承
    比如,A是子类 B是父类,A具备B所有的功能(除了父类的私有资源和构造方法)
    子类如果要修改原有功能,需要重写(方法签名与父类一致 + 权限修饰符>=父类修饰符)

  2. 类和接口的关系
    实现关系.可以单实现,也可以多实现
    class A implements B,C{}
    其中A是实现类,B和C是接口,A拥有BC接口的所有功能,只是需要进行方法的重写,否则A就是抽象类

  3. 接口与接口的关系
    是继承关系,可以单继承,也可以多继承
    interface A extends B,C{}
    其中ABC都是接口,A是子接口,具有BC接口的所有功能(抽象方法)
    class X implements A{}
    X实现类需要重写ABC接口的所有方法,否则就是抽象类
    class A extends B implements C,D{}
    其中A是实现类,也是B的子类,同时拥有CD接口的所有功能
    这时A需要重写CD接口里的所有抽象方法

  4. 抽象类与接口的区别

    抽象类是一个特殊的类,特殊在,抽象类中可以包含没有方法体的方法(抽象方法)
    接口可以理解成一个特殊的抽象类,特殊在,接口里的都是抽象方法,没有普通方法
    接口会为方法自动拼接public abstract,还会为变量自动拼接public final static
    抽象类可以有成员变量成员常量 接口只能有静态常量
    抽象类可以有构造方法–用来给子类创建对象,接口中没有构造方法
    抽象类和接口都不能实例化(创建对象)
    接口可继承接口,并可多继承接口,但类只能单继承
    抽象方法只能声明,不能实现,接口是设计的结果 ,抽象类是重构的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值