一、局部内部类
1.定义
定义在局部位置的内部类成为局部内部类
2.特点
局部内部类不能被private、public、protected、static等成员修饰符修饰(可以被final修饰)
如果在局部内部类中使用所在方法的局部变量,则该变量默认被final修饰
局部内部类只能在所在方法中通过对象访问成员
二、匿名内部类
1.定义
如果某个类以及它的实例只是用一次,则可以将类的定义和类的创建放到一起完成或者说在定义类的同时创建一个类,这种方式定义的没有名字的类就成为匿名内部类
2.作用
简化没有自己本身作用的实现类
3.分类
1)直接调用 -> 匿名对象:只能在当前使用一次
2)多次调用 -> 地址赋值给引用,通过引用多次调用
3)方法的参数传递
三、Lambda表达式
1.作用
用来简化匿名内部类对象
2.语法
() -> {}
() 重写方法的参数列表
-> 箭头函数 lambda符号
{} 重写方法的主体
3.前提
接口应为 函数式接口:只有一个必须被重写的抽象方法的接口
强制检测是否为函数式接口 :FunctionalInterface
4.表达式的5种写法
1)省略方法名,直接使用() -> {}
2)如果在{}种的方法语句只有一句,前后的{}可以省略
3)如果具有参数,参数的类型可以省略
4)如果存在参数,且参数只有一个,参数列表前后的()可以省略
5)如果存在返回值,并且方法体语句中只有一句,就是return语句,则前后的{}和return关键字可以省略
四、异常
1.定义
Java异常类是Java提供的用于处理程序中错误的一种机制。
2.体系
Throwable包下分为Error和Exception
Error:指错误,一般是由虚拟机生成并脱出的
Exception:异常
编译时异常:编译期间遇到的异常,如果不处理,程序将无法运行
运行时异常:程序运行期间遇到的异常,通过增强程序的健壮性的代码就可以解决(如:if语句)
3.异常处理方案
1)抛出异常 thorws
2)捕获异常
try...catch
try{
有可能出现异常的代码;
}catch(FileNotFoundException e){
遇到异常后执行的代码;
}catch(NullPointerException e){
遇到异常执行的代码;
}.....
catch(Exception e){//-->接盘侠 //Exception e = new ClassCastException();
} finally{
无论try中是否遇到异常,结束之前都会执行finally中的代码
}
4.注意
1)无论是编译时异常还是运行时异常,两种方案都可以解决
2)但是编译时异常只能通过这2种解决方案处理
3)运行时异常可以通过这2种方案解决,也可以通过增强程序的健壮性if解决
4)一个try后面可以接1~n个catch
5)如果try中的代码一旦遇到异常try中后面的代码不会执行,会直接判断catch,多个catch之间从上到下判断,如果找到对应的catch,执行{}中的代码
6)如果存在多个catch,大范围类型的捕获放在最后
7)一般在finally中会定义资源的关闭等代码
5.自定义异常
自定义的异常类型需要直接或者间接的继承自Exception
自定义的异常类型为运行时异常,需要直接或者间接地继承自RuntimeException
throw制造异常