局部内部类的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();
}
}

如果我们要调用一次接口的情况下的话 ,我们可以使用匿名内部类 

这样我们就不用在创建一个实现接口的类了 

我们来看一下运行结果

 

posted @ 2022-07-04 10:54  一位程序袁  阅读(36)  评论(0编辑  收藏  举报