zoukankan      html  css  js  c++  java
  • JavaSE 为什么局部内部类对调用的局部变量一定要求为final类型

    当局部内部类访问同属于一个方法内的局部变量一定要求这个局部变量为final类型,或者这个局部变量是事实不变的呢?

    解释:类new出来的对象是存在于堆当中的,而局部变量是跟着方法走的,存在于栈当中的,这就意味着对象的生命周期是大于堆中的方法的;

    局部变量用完了之后就会被内存弹栈回收,若对象想在局部变量被回收完成后再调用局部变量就需要对之前的局部变量进行拷贝再使用

    假若局部变量不是final型的,当num发生了变化,则会导致对象再次使用num的时候产生数据拷贝错误导致程序运行结果不正确,这是不容许发生的。

    所以局部内部类在调用局部变量的时候,一定要求局部变量要为final类型的。

    自Java 8开始,IDE允许省略final关键字,但是一定要注意:局部变量仍然要求不可以改变。

    public class InnerLocalVariable {
        public void methodOuter(){
            class Inner{//因为你是局部内部类,只能在这个方法块内起作用,所以没有必要也不能写修饰类修饰权限
                final int num=10;
                public void method(){
                    System.out.println(num);
                }
            }
            Inner inner=new Inner();
            inner.method();
        }
    }
  • 相关阅读:
    操作~拷贝clone()
    属性/css~储存
    属性/css~位置.offset()&offsetParent()&position()&scrollTop()&scrollLeft()
    属性/css~尺寸.height()
    设置,获取,删除cookie方法
    Cookie
    属性/css~css.css()
    Python井字游戏
    Asp.net vNext 学习之路(三)
    使用C#发送Http 请求实现模拟登陆(以博客园为例)
  • 原文地址:https://www.cnblogs.com/oldfish123/p/14357315.html
Copyright © 2011-2022 走看看