ReviewDay 5
接口
接口是更加抽象的抽象类
- 接口不能被实例化
- 接口中所有的方法都是 public 方法
- 接口中的抽象方法可以不用abstract
- 接口的字段都是 public static final 的常量
- 除了抽象类,实现接口的类必须实现接口的所有方法
接口与抽象类
接口的多态特性
- 多态参数
- 多态数组
- 多态传递(实现的接口实现了另一个接口)
lambda 表达式
内部类
内部类的分类
- 定义在外部类的局部位置(方法中、代码块)
> (1)局部内部类 (有类名)
>
> (2)匿名内部类(没有类名)
- 定义在外部类的成员位置
> (1)成员内部类
>
> (2)静态内部类 (static)
局部内部类
- 可以直接访问内部类的所有成员,包括私有的
- 不能添加访问修饰符,相当于一个局部变量,但可以用final
- 作用域仅在定义它的方法或代码块
- 外部类和局部内部类的成员重名时,要访问外部类的成员时可以使用 (外部类名.this.成员)
匿名内部类
//基于抽象类的匿名内部类
//基于接口的匿名内部类
new Comparator() {
@Override
public int compare() {
//重写方法
}
}
### 成员内部类
- 成员内部类定义外部类的成员位置,并且没有static
- 可以添加访问修饰符
- 作用域与其他成员变量一样
- 外部类访问成员内部类时须创建对象再访问
- 外部类和局部内部类的成员重名时,要访问外部类的成员时可以使用 (外部类名.this.成员)
### 静态内部类
- 定义于外部类的成员位置,并且有static修饰 (有static修饰的成员内部类)
## 异常
### 执行过程中所发生的异常事件可以分为两大类
- Error(错误):JVM无法解决的严重问题,如StackOverflowError和OOM
- Exception:因编程错误或偶然的外在因素导致的一般性问题
- 运行时异常
> 编译器检查不出来,一般是编程时的逻辑错误
- 编译异常
> 编译器要求的必须处置的异常,否则不能通过编译
![exception体系图](http://pic.ruikai.ltd/img/202204101510019.png)
### 异常处理
- try-catch-finally
> 捕获异常,自行处理
1) 如果try块中没有出现异常,则执行try块中的所有语句,不再执行catch块,若有finally,最后还要执行finally块中语句
2) 如果出现了异常,则try块中剩下的语句不在执行,将执行catch块,最后执行finally块
```java
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语句,这些语句将在资源被关闭后执行
>
自定义异常
1) 自定义类继承Exception或RuntimeException
2) 继承Exception则属于编译异常
3) 继承RuntimeException则属于运行异常
class AgeException extends RuntimeException {
public AgeException(String message) {
super(message);
}
}
|