美文网首页
为什么内部类中访问局部变量,局部变量需要final修饰

为什么内部类中访问局部变量,局部变量需要final修饰

作者: 凯玲之恋 | 来源:发表于2019-01-16 00:12 被阅读16次

java内部类

  • 原因是:因为局部变量和匿名内部类的生命周期不同。

  • 匿名内部类是创建后是存储在堆中的

  • 而方法中的局部变量是存储在Java栈中,当方法执行完毕后,就进行退栈,同时局部变量也会消失。

那么此时匿名内部类还有可能在堆中存储着,那么匿名内部类要到哪里去找这个局部变量呢?

  • 为了解决这个问题编译器为自动地帮我们在匿名内部类中创建了一个局部变量的备份,也就是说即使方法执结束,匿名内部类中还有一个备份,自然就不怕找不到了。
  • 但是问题又来了。如果局部变量中的a不停的在变化。那么岂不是也要让备份的a变量无时无刻的变化。为了保持局部变量与匿名内部类中备份域保持一致。编译器不得不规定死这些局部域必须是常量,一旦赋值不能再发生变化了。所以为什么匿名内部类应用外部方法的域必须是常量域的原因所在了。

特别注意:在Java8中已经去掉要对final的修饰限制,但其实只要在匿名内部类使用了,该变量还是会自动变为final类型(只能使用,不能赋值)

相关文章

  • 匿名内部类问题

    匿名内部类访问的外部类局部变量为什么要用final 修饰,jdk8为啥不需要了? 匿名内部类访问的外部类局部变量为...

  • Java

    JDK8之前,匿名内部类访问局部变量,局部变量为什么必须要用 final 修饰。 我们先来看一段代码: 原因是:因...

  • 匿名内部类的使用

    1.匿名内部类中局部变量的使用 在JDK8中,匿名内部类使用局部变量不再要求局部变量使用final修饰,那么是否我...

  • 为什么内部类中访问局部变量,局部变量需要final修饰

    java内部类 原因是:因为局部变量和匿名内部类的生命周期不同。 匿名内部类是创建后是存储在堆中的 而方法中的局部...

  • 内部类引用外部类的局部变量要用final修饰

    为什么内部类引用外部类的局部变量时,此变量要用final修饰 如图 上面的代码是使用了匿名内部类的方式。Runna...

  • 匿名内部类中使用的局部变量设置为final

    匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型 1. 这里所说的“匿名内部类”主要是指在...

  • java面试2

    1.成员变量和局部变量区别 成员变量可以被访问修饰符和static修饰,而局部变量不可以,final两者都可以修饰...

  • java内部类

    一、内部类为什么存在 为什么要使用内部类 二、内部类的分类 java内部类的分类 三、为什么内部类中访问局部变量,...

  • Java之final

    final可以修饰变量、方法、类。 final修饰变量 final修饰成员属性(变量)必须初始化; 修饰局部变量使...

  • final关键字

    final:可以修饰 类,方法,局部变量,成员变量 final修饰类:不能有子类 final修饰方法:不能被重写 ...

网友评论

      本文标题:为什么内部类中访问局部变量,局部变量需要final修饰

      本文链接:https://www.haomeiwen.com/subject/evfpdqtx.html