接口和异常

来源:互联网 发布:淘宝挂拍衣服后期处理 编辑:程序博客网 时间:2024/06/14 19:23

接口

—特殊的抽象类,即所有方法都是抽象方法的抽象类就是Java中的接口(interface)

只有抽象方法没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)

 

作用

接口是设计层面的概念,往往由设计师设计,将定义与实现分离

程序员实现接口,实现具体方法

面向接口编程的指在面向对象的系统中所有的类或者模块之间的交互是由接口完成的

 

特点

1.特殊的抽象类

2.没有变量,只能有public static final修饰的静态常量。三个修饰符可以省略

3.所有方法都是抽象方法,且默认就是public权限

 

类实现接口

继承—单继承,实现一个父类的方法

多继承—接口,实现多个类的方法

 

基本格式:

[修饰符] class <类名> [extends 父类名] [implements 接口列表]{ }

 

接口继承接口

接口可以继承多个接口,用extends,不是implement!

例:Interface3 extends Interface0, Interface1, interface2……

接口中是抽象方法,不必担心多继承导致几个类中由相同方法名的方法导致调用出错

 

抽象类与接口对比

 

 

 

abstract class

interface

属性

不用限制

静态常量

构造方法

可有可无

没有

普通方法

可以有具体方法

必须是抽象方法

子类

单一继承

多重实现

内部类

可以有

可以有

没有

可以有

 

 

 

异常

 

异常是不正常的事件,不是错误。异常时可以运行,错误不能运行

 

 

异常发生通常包含以下几大类

用户输入了非法数据

要打开的文件不存在

网络通信时连接中断,或者JVM内存溢出

 

错误是很难处理的,比如内存溢出等,不能够通过异常处理机制来解决

异常是程序中发生的不正常事件流,通过处理程序依然可以运行下去。但是错误是无法控制的,程序肯定要中断

 

 Throwable类有两个直接子类:

Exception类:异常,是所有异常类的父类

Error类:错误,可能是编译期错误或者系统错误

 

  异常分为运行期异常和编译期异常两种

运行期异常

程序运行时抛除的异常,所有RuntimeException的子类都是运行期异常

—数学异常

—空指针异常

—数组下标越界

 

编译器异常(非运行期异常)

除去运行期的异常都是编译期异常,也称为检测异常

—IOException

—SQLException

 

 

 

 

 

 

 

 

 

 

 

 

常用异常

 

 

 

捕获异常

使用 try 和 catch 关键字可以捕获异常try/catch 代码块放在异常可能发生的地方。try/catch代码块中的代码称为保护代码

Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样

 

finally

finally 关键字用来创建在 try 代码块后面执行的代码块

无论是否发生异常,finally 代码块中的代码总会被执行

finally 代码块中,可以运行清理类型等收尾善后性质的语句

 

 try{

  可能会发生异常的代码

  }catch(异常类型 引用名){

  异常处理代码

  }finally{

 必须执行代码

  }

Finally永远执行,return最后执行,有异常时执行catch

try、catch可以组合,try、finally可以组合,在一个业务中try只有一个,catch可以有多个,finally可以没有或有一个

try中,第一个异常发生则直接进入catch,不再继续执行

 

throw与throws、层层抛出异常

throw用于方法体中,用来抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常,要么使用throws声明异常

throws用于方法声明处,用来声明该方法可能发生的异常类型,可以是多个异常类型,用来强制调用该方法时处理这些异常

抽象方法也可以使用throws,所以说并不是有throw才有throws

如果使用throw关键字抛异常,一定不要使用Exception,不能很好标记异常类型

任何方法都可以用throws声明异常,在方法处声明部分抛出的异常必须大于等于throw抛出的异常

抛出异常时,用try/catch处理异常或在顶层方法中throws声明,若没处理,则交给JVM(JRE虚拟机)处理

Throws包含的编译期异常——必须处理

运行期异常——不需要处理

有继承关系,父类有throws,子类才能有throws,且父类throws比子类的异常范围大

 

自定义异常

自定义异常就是自己定义的异常类,也就是API中的标准异常类的直接或间接的子类

作用:用自定义异常标记业务逻辑的异常,避免与标准异常混淆

 

public  class 异常类名 extends Exception{

        public 异常类名(String msg){

            super(msg);

 }

 }

自定义异常类中往往不写其他方法,只重载需要使用的构造方法

 

在程序中使用自定义异常大致可以分为以下几步

创建自定义异常类

在方法中通过throw 关键字抛出自定义异常

如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理,否则在方法的声明处通过throws关键字声明该异常

调用throws声明该异常的方法时,使用try  catch捕获自定义的异常类型,并在catch中进行处理

 

原创粉丝点击