A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

2黑马币
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”而且不报错呢??

最佳答案

查看完整内容

Jdk8.0以后可以这样,之前的版本不行

9 个回复

倒序浏览
再见_悟空 来自手机 中级黑马 2015-8-23 15:28:36
沙发
Jdk8.0以后可以这样,之前的版本不行
回复 使用道具 举报
这个应该很容易懂吧。
你写的是局部变量和局部内部类
他们的作用域都在方法function内,
所以内部类可以调用和他在同一个作用域内的变量。
这就好比内部类在成员位的时候可以访问成员变量是一样,
方法也是一段被封装可以独立运行的小程序,
你可以把function看成一个类这样就能理解了。
回复 使用道具 举报
zhangcheng0403 发表于 2015-8-23 19:01
这个应该很容易懂吧。
你写的是局部变量和局部内部类
他们的作用域都在方法function内,

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

是这样吗,长见识了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马