局部内部类的fina问题、匿名内部类
局部内部类的fina问题
/*
* 注意点:局部内部类,如果希望访问在方法的局部变量,那么这个局部变量必须是有(有效final的)
* */
public void MethodOuter(){
final int num =10; //所在方法的局部变量
class Myinner{ // 内不类
public void methodInner(){ //内部方法
System.out.println(num);
}
}
}
}
这里有一个注意点:
注意点:局部内部类,如果希望访问在方法的局部变量,那么这个局部变量必须是有(有效final的)
备注:在java8以上 在我们写局部变量只要不变,是可以省略final的
原因:
- new 出来的对象都是在堆当中的
- 局部变量是跟着方法走的是在栈内存中的
- 方法结束后会立即退出 局部变量就会消失
- 但是new 出来的对象会在堆处持续出现,直到立即回收
匿名内部类
我们先来使用正常的方式来实现一下
我们来定义一个接口
public interface Anonymous {
public void aa();
}
接口中定义一个方法
然后我们在来写一个实现类
package Anonymous;
public class Anonymousimpl implements Anonymous {
@Override
public void aa() {
System.out.println("实现了接口中的方法");
}
}
来实现这个接口
在来创建一个测试类
public class Test {
public static void main(String[] args) {
Anonymousimpl anonymousimpl = new Anonymousimpl();
anonymousimpl.aa();
}
}
创建出实现接口中的类 来调用方法
然后我们在来看一下匿名内部类
//使用匿名内部类
Anonymous pbj = new Anonymous() {
@Override
public void aa() {
System.out.println("使用匿名内部类实现了接口");
}
};
pbj.aa();
}
}
如果我们要调用一次接口的情况下的话 ,我们可以使用匿名内部类
这样我们就不用在创建一个实现接口的类了
我们来看一下运行结果