内部类总结
内部类总结
1 成员内部类
2 静态成员内部类
3 局部内部类
3.1 静态方法中的局部内部类
3.2 非静态方法中的局部内部类
3.3 局部内部类不能是静态的
无论在静态方法还是非静态方法中,都不能定义static修饰的内部类。
4 匿名内部类
4.1 静态方法中的匿名内部类
4.2 非静态方法中的匿名内部类
4.3 静态代码块中的匿名内部类
要想不在方法中定义匿名内部类,唯一的方法就是将其放入静态代码块。
匿名内部类的lambda表达式写法
当匿名内部类的父类中只有一个抽象方法时,匿名内部类可以写作lambda表达式的形式:
关于final
在jdk1.8之前,局部内部类与写在方法中的匿名内部类,如果要访问该方法中的局部变量,必须要用final修饰该变量,在jdk1.8之后则取消了这条限制。
为什么要加final呢?
是因为生命周期不一致, 局部变量直接存储在栈中,当方法执行结束后,非final的局部变量就被销毁。而局部内部类对局部变量的引用依然存在,如果局部内部类要调用局部变量时,就会出错。加了final,可以确保局部内部类使用的变量与外层的局部变量区分开,解决了这个问题。