ReviewDay 5
接口
接口是更加抽象的抽象类
- 接口不能被实例化
- 接口中所有的方法都是 public 方法
- 接口中的抽象方法可以不用abstract
- 接口的字段都是 public static final 的常量
- 除了抽象类,实现接口的类必须实现接口的所有方法
接口与抽象类
-
每个类只能继承一个类,但一个类可以同时实现多个接口
-
接口不能继承其他的类,但可以继承多个别的接口
interface A extends B, C{}
-
实现接口与继承类
- 接口与继承解决的问题不同
继承价值主要在于解决代码的复用性和可维护性
接口价值主要在于设计号各种规范,让其他类实现这些方法
- 接口比继承更加灵活
- 接口一定程度上实现代码解耦
- 接口与继承解决的问题不同
接口的多态特性
- 多态参数
- 多态数组
- 多态传递(实现的接口实现了另一个接口)
lambda 表达式
内部类
内部类的分类
- 定义在外部类的局部位置(方法中、代码块)
(1)局部内部类 (有类名)
(2)匿名内部类(没有类名)
- 定义在外部类的成员位置
(1)成员内部类
(2)静态内部类 (static)
局部内部类
- 可以直接访问内部类的所有成员,包括私有的
- 不能添加访问修饰符,相当于一个局部变量,但可以用final
- 作用域仅在定义它的方法或代码块
- 外部类和局部内部类的成员重名时,要访问外部类的成员时可以使用 (外部类名.this.成员)
匿名内部类
- 既是一个类的定义,同时本身也是一个对象
- 可以直接访问内部类的所有成员,包括私有的
- 不能添加访问修饰符,相当于一个局部变量
- 匿名内部类不能有构造器,但可以提供对象初始化代码块
- 作用域仅在定义它的方法或代码块
- 外部其他类不能访问匿名内部类
- 常用于参数传递
//基于类的匿名内部类
Father father = new Father("jack") {
@Override
public void test() {
//匿名内部类重写了方法
}
}
//基于抽象类的匿名内部类
//基于接口的匿名内部类
new Comparator() {
@Override
public int compare() {
//重写方法
}
}
成员内部类
- 成员内部类定义外部类的成员位置,并且没有static
- 可以添加访问修饰符
- 作用域与其他成员变量一样
- 外部类访问成员内部类时须创建对象再访问
- 外部类和局部内部类的成员重名时,要访问外部类的成员时可以使用 (外部类名.this.成员)
静态内部类
- 定义于外部类的成员位置,并且有static修饰 (有static修饰的成员内部类)
异常
执行过程中所发生的异常事件可以分为两大类
-
Error(错误):JVM无法解决的严重问题,如StackOverflowError和OOM
-
Exception:因编程错误或偶然的外在因素导致的一般性问题
- 运行时异常
编译器检查不出来,一般是编程时的逻辑错误
- 编译异常
编译器要求的必须处置的异常,否则不能通过编译
异常处理
- try-catch-finally
捕获异常,自行处理
- 如果try块中没有出现异常,则执行try块中的所有语句,不再执行catch块,若有finally,最后还要执行finally块中语句
- 如果出现了异常,则try块中剩下的语句不在执行,将执行catch块,最后执行finally块
try{
return 1;
} catch Exception e {
return 2;
} finally {
return 3;
}
//try 块中没有出现异常,catch块不执行,因为有finally块中的return(finally必须执行),所以finally中return执行,try中return不执行
try{
//出现异常
return 1;
} catch Exception e {
return 2;
} finally {
return 3;
}
//try 中出现异常,try中return不再执行, 又因为finally有return,所以catch中return不执行,finally中return被执行
try{
//出现异常
return 1;
} catch Exception e {
int a = 1;
return a;
} finally {
a += 1;
}
//try 中出现异常, catch被执行,执行到return时会将 a = 1保存为临时变量 temp = 1;最后finally修改后再执行catch块中的语句,并将临时变量返回,而不是修改后的a
- throws/throw
抛出异常,交给调用者处理
throw和throws的区别
-try-with-resources(带资源的try语句)
try (Resource res = ...) //res实现了Closeable接口(AutoCloseable的子接口)
{
work with res ...
}
try 退出时,会自动调用res.close(),自动关闭资源(无论是否出现异常)
try-with-resource也可以有catch、finally语句,这些语句将在资源被关闭后执行
自定义异常
- 自定义类继承Exception或RuntimeException
- 继承Exception则属于编译异常
- 继承RuntimeException则属于运行异常
class AgeException extends RuntimeException {
public AgeException(String message) {
super(message);
}
}
编译异常
3) 继承RuntimeException则属于运行异常
class AgeException extends RuntimeException {
public AgeException(String message) {
super(message);
}
}