abstract 关键字
abstract 抽象的
abstract可以用来修饰的结构:类、方法
abstract修饰类:抽象类
此类不能被实例化
抽象内中一定有构造器,便于子类实例化时调用(涉及:子类实例化的全过程)
开发中,都会提供抽象类的子类,让子类独享实例化,完成相关的操作
abstract修饰方法:抽象方法
抽象方法只有方法的声明,没有方法体
包含抽象方法的类,一定是抽象类。反之,抽象类中可以没有抽象方法
若子类重写了父类中的所有的抽象方法,此子类可实例化
若子类没有重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要abstract修饰
使用注意点:
abstract不能用来修饰私有方法、静态方法、final的方法、final的类
抽象类的匿名子类
匿名子类的匿名对象
模板方法设计模式——多态的应用
抽象类作为多个子类的通用模板,子类在抽象的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。
在软件开发中实现一个算法时,整体步骤很固定、通用,可以在父类中写好,但是有些部分易变,这些可以抽象出来,供不同子类实现
接口 interface
在Java中,接口和类是并列的结构
作用:1.用于扩展功能
2.提供一种规范和标准,一组规则,体现了“如果你是……则必须能……”
3.可以体现多态性(接口名 变量名=new 类名())
4.开发中,体会面向接口编程
定义全局常量,public static final的,书写时可以省略不写
定义抽象方法,public abstract的
定义静态方法、默认方法
接口中不能定义构造器,意味着接口不能实例化
接口通过让类去实现(implements)的方式来使用
如果实现类覆盖了接口中所有的抽象方法,则此实现类就可以实例化
如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
Java类可以实现多个接口 >>> 弥补了Java单继承性的局限性
接口与接口之间可以继承,而且可以是多继承
抽象类与接口有哪些异同?
相同点:
都不能被实例化,都可以包含抽象方法,都可以实现多态
不同点:
接口不能有构造方法,接口不建议有静态方法
抽象类中可以有普通方法,抽象方法也可以不是公共的
抽象类的目的是代码重用(被继承),接口的目的是功能拓展(被实现)
异常处理
throwable
Error:Java虚拟机无法解决的严重问题,一般不编写针对性的代码进行处理
比如:StackOverflowError(栈溢出)和OutOfMemoryError(堆溢出,简称OOM)
Exception:其它因为编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理
编译时异常(受检异常)
IOException 输入输出异常
FileNotFoundException 文件未找到异常
ClassNotFoundException 类找不到异常
运行时异常(非受检异常)
NullPointerException 空指针异常
ArrayIndexOutofBoundsException 数组下标越界异常
ClassCastException 类型转换异常
inputmismatchException 输入不匹配异常
ArithmeticException 算术异常
NumberFormatException 数字格式化异常
Java异常处理:抓抛模型
过程一,“抛” ,程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的 对象,并将对象抛出。一旦抛出后,其后的代码就不再执行
过程二,“抓”,异常的处理方式
法一:try-catch-finally
try{
//可能出现异常的代码
}catch(异常类型1 变量名1){
//处理异常的方式1
}
finally{
//一定会执行的代码
}
说明:
1.finally是可选的,声明的是一定会执行的代码
2.将可能出现异常代码包装起来,在执行过程,一旦出现异常,就会生成一个对应异常的对象,根据此对象的类型,去catch中进行匹配
3.一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理,一旦处理完成,就跳出当前的try-catch结构,继续执行其后的代码
4.常用的异常处理对象的方式:
String getMessage() printStackTrace()
使用try-catch-finally处理编译时异常,使得程序在编译时就不再报错,但是运行时仍可能报错。相当于我们用此种方法,将一个编译时可能出现的异常,延迟到运行出现
法二:throws + 异常类型
写在方法的声明处,指明方法执行时,可能会抛出的异常类型;
一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出,并没有真正将异常处理掉
里面要有throw new 异常类型
开发中如何选择?
异常处理方法重写规则:
子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
自定义写异常类
1.自定义的类继承于现有的异常类,extends Exception