抽象类
抽象类的概述:
当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了!
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类!
抽象类的特点:
1.抽象类和抽象方法必须被abstract关键字修饰。
2.抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类。
3.抽象类不能实例化,但是参照多态的方式,通过子类对象实例化,这叫抽象类多态;抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
4.抽象类的子类要么重写抽象类中的所有抽象方法,要么是抽象类。
抽象类的成员特点
注意:
抽象类的子类,要么重写抽象类中的所有抽象方法,要么自己是抽象类,不然会报错。
接口:
概念:
接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用,java中的接口更多体现在对行为的抽象。
特点:
1.接口用关键字inerface修饰。如:public interface 接口名{}
2.类实现接口用implements表示。如:public class 类名 implements 接口名{}
3.接口不能实例化。
接口如何实例化,参照多态的方式,通过实现类对象实例化,这叫接口多态;多态的形式:具体类多态,抽象类多态,接口多态。
4.接口的实现类要么重写接口中的所有抽象方法,要么是抽象类。
接口的成员特点
成员变量:
1.只能是常量,不能被修改
2.默认修饰符:public static final
构造方法:
1.接口没有构造方法,因为接口主要是对行为进行抽象,是没有具体存在
2.一个类如果没有父类,默认继承自Object类
成员方法:
1.都是抽象方法
2.默认修饰符:public abstract
类和接口的关系
抽象类和接口的区别
1.接口只有定义,不能有方法的实现
2.接口强调特定功能的实现,而抽象类强调所属关系
也可以通俗成把一个东西必须有的功能放入抽象,可有可无的功能放如接口。如门,开门关门是基本的,所以放入抽象类,而报警功能在一些门上并没有这个功能,如果一并放入抽象,就会固定使用,所以可以放入接口中,如果这个门有这个功能就实现这个接口。
异常体系
概述
异常是指由于各种不期而至的情况,导致程序中断运行的一种指令流,如:文件找不到、非法参数、网络超时等。为了保证正序正常运行,在设计程序时必须考虑到各种异常情况,并正确的对异常进行处理。
异常又可以分为如下两类:
1.Erroy:虚拟机无法解决的问题。 主要问题为JVM系统内部的错误。堆栈溢出等。
2.Exception:因编程错误,或者外在因素导致的问题。比如:空指针异常,数组越界等。
异常的体系结构
异常处理
JVM的默认处理方案
如果程序出现了问题,我们没有做任何处理,最终jvm会做默认的处理。1:把异常的名称,异常原因及异常出现的位置等信息输出在了控制台;2.程序停止执行。
try-catch方式处理异常
格式:
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
}
执行流程
1.程序从 try 里面的代码开始执行
2.出现异常,就会跳转到对应的 catch 里面去执行
3.执行完毕之后,程序还可以继续往下执行
注意:try-catch是我们最经常要用到的一种处理方式。
Throwable
方法名 | 说明 |
---|---|
public String getMessage() | 返回此 throwable 的详细消息字符串 |
public String toString() | 返回此可抛出的简短描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台 |
编译时异常和运行时异常的区别
-
编译时异常
-
都是Exception类及其子类
-
必须显示处理,否则程序就会发生错误,无法通过编译
-
-
运行时异常
-
都是RuntimeException类及其子类
-
无需显示处理,也可以和编译时异常一样处理
-
运行时异常可以不处理,但出现问题后,需要我们回来修改代码
-
throws方式处理异常
格式:
public void 方法() throws 异常类名 {
}
什么时候使用?
如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
注意事项:
-
这个throws格式是跟在方法的括号后面的
-
编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案,将来谁调用谁处理
-
运行时异常可以不处理,出现问题后,需要我们回来修改代码
throws和throw的区别