抽象类 (用abstract关键字)
当遇到某一些对象/类含有大量互相重复的属性、方法,并且部分方法又需要重写时,我们可以为这一批类创建一个共同的父类,这个父类中以正常方式含有重复且不需要重写的内容,并另外包含一些抽象方法,只有方法头,没有方法体,在子类继承时必须重写方法体为自己需要的样子,且能继承获得父类定义好的内容
-
抽象类不能new
-
抽象类可以写普通的方法
-
抽象方法必须写在抽象类中
-
子类必须要实现抽象类中的方法,除非子类也是抽象类
接口
只有规范,自己无法写方法,只能做专业的约束,实现了约束和实现分离
-
约束
-
定义一些方法,让不同的人实现
-
接口中的所有方法都是公开抽象的(public abstract)
-
所有的属性都是公开静态的常量(public static final)
-
implements可以实现多个接口
-
实现类必须重写接口中的方法
-
实现类命名一般以Implement结尾
public class aaaImpl implements aaa,bbb{ //重写的接口中的方法 }
内部类
一个java类中只能有一个public class,其他class可以有无数个
成员内部类
写在一个外部类的里面,作为成员,并且可以获取外部类的私有属性
静态内部类
作为内部类添加static关键字
局部内部类
方法中的类
匿名内部类
直接new,前面不起名,不用将实例保存到变量中
异常
java中把异常当做对象来处理,并定义了一个基类java.lang.Throwable作为所有异常的超类
检查性异常
一般由用户错误引起,如,所需文件被删除,用户提供了非法数据等
运行时异常
可以由程序员避免的异常,编译时可以被忽略
错误
不受程序员控制,在代码中可能被忽略,如,栈溢出,内存不足,链接错误,类定义错误等
异常处理机制
抛出
throw new ArithmeticException();//方法中主动抛出异常
throws用于方法上抛出异常
捕获
捕获异常时可以写多个catch,但是当两个catch有包含关系时,大的应该写在后面,如果大的在前,则后面小的分类会被覆盖
try{ //监控区域 System.out.println(1/0); }catch(ArithmeticException e){//捕获异常 System.out.println("程序出现异常"); }finally{//不论是否出现异常都会执行,一般用来释放资源 }