黑马程序员技术交流社区

标题: 内部类访问局部变量需要声明最终类型的问题 [打印本页]

作者: 阿秋    时间: 2015-8-23 15:28
标题: 内部类访问局部变量需要声明最终类型的问题
class Demo
{
        void function()
        {
                int y=4;
                class Timo
                {
                        void run()
                        {
                                System.out.println(y);
                        }
                }
                new Timo().run();
        }
}
class Q1
{
        public static void main(String[] args)
        {
                new Demo().function();
        }
}
//为什么我没有声明局部变量为最终类型,但还是可以运行出“4”而且不报错呢??


作者: 再见_悟空    时间: 2015-8-23 15:28
Jdk8.0以后可以这样,之前的版本不行
作者: zhangcheng0403    时间: 2015-8-23 19:01
这个应该很容易懂吧。
你写的是局部变量和局部内部类
他们的作用域都在方法function内,
所以内部类可以调用和他在同一个作用域内的变量。
这就好比内部类在成员位的时候可以访问成员变量是一样,
方法也是一段被封装可以独立运行的小程序,
你可以把function看成一个类这样就能理解了。

作者: 阿秋    时间: 2015-8-23 19:51
zhangcheng0403 发表于 2015-8-23 19:01
这个应该很容易懂吧。
你写的是局部变量和局部内部类
他们的作用域都在方法function内,

我是在看毕老师的java基础视频中,其中定义内部类访问局部变量,需要用 final 进行修饰,如果没有就会编译错误,而我在没有使用 final int y=4的情况下并没有编译错误,这是我不理解的地方,主要是关于 final 是否必要的问题。
作者: 夸克    时间: 2015-8-23 23:25
http://bbs.itheima.com/thread-122215-1-1.html
这个论坛上有人问过这个问题了,下边有人解答了
作者: kingkeykang    时间: 2015-8-24 20:00
内部类定义在内部与局部变量y在同一级别上,当然有权限访问了,从内向外都是可以直接访问。
作者: wu199309023    时间: 2015-8-24 20:19
jdk8.0后可以的的但1.8以前不行
作者: Coolman    时间: 2015-8-24 21:02
确实是JDK版本的问题,JDK8默认添加 final
作者: 荣斌    时间: 2015-8-25 11:48
只有是,访问内部类成员方法中的成员变量时,这个成员变量才要是被final修饰的,其他位置的就不用修饰也能访问。你可以再试一下。
作者: zhao1991    时间: 2015-8-25 13:55
再见_悟空 发表于 2015-8-23 22:00
Jdk8.0以后可以这样,之前的版本不行

是这样吗,长见识了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2