黑马程序员技术交流社区

标题: final修饰符的疑问 [打印本页]

作者: znouy_92    时间: 2014-12-26 14:40
标题: final修饰符的疑问
再看毕老师的教学视频时,毕老师讲内部类定义在局部位置上时,说只能访问被fianal修饰的局部变量,但我把final拿掉后,编译运行都没有错误,而且也有结果,这是为什么呢?
作者: 滔哥    时间: 2014-12-26 18:53
检查一下,是否有错误
作者: duluhua    时间: 2014-12-26 19:26
我感觉你的不太可能,我特地按照你说的写了个类,在局部位置的内部类访问局部变量,该局部变量必须是声明为final的。你看看你的内部类是不是在局部的,或者是不是局部变量。这是我写的代码:
public class B {

    public static void main(String[] args) {
        B b = new B();
        b.method(5);// 创建对象并调用方法method
    }

    public void method(final int i) {// 定义局部变量
        // 在方法内定义内部类,是局部的
        class D {
            public String name;

            // 定义类的方法,该方法内访问局部变量
            public void method2() {
                System.out.println(i);// 访问局部变量,必须把i声明为final 否则编译不通过
            }
        }

        new D().method2();// 创建内部类的对象并调用其方法
    }
   
}
作者: jwl245322883    时间: 2014-12-26 20:24
过来看一下,积累一下经验
作者: 钟道上    时间: 2014-12-26 20:58
你把代码写出来看看嘛
作者: 叫我小强    时间: 2014-12-26 21:02
JDK版本为1.8的话,会自动加上final的,有可能是你JDK版本的问题。
作者: 82387737    时间: 2014-12-26 21:22
java 1.8之后回默认加上final。
作者: 82387737    时间: 2014-12-26 21:23
内部类的成员变量必须被final修饰。。但是1.8之后,不加也可以,因为默认给你加上了。
作者: znouy_92    时间: 2014-12-28 20:40
滔哥 发表于 2014-12-26 18:53
检查一下,是否有错误

没有错误啊,看完老师的视频立马就运行了一下,发现竟然可以
作者: znouy_92    时间: 2014-12-28 20:42
duluhua 发表于 2014-12-26 19:26
我感觉你的不太可能,我特地按照你说的写了个类,在局部位置的内部类访问局部变量,该局部变量必须是声明为 ...

那你编译运行过没,我用的是内部类访问局部变量啊
作者: znouy_92    时间: 2014-12-28 20:45
钟道上 发表于 2014-12-26 20:58
你把代码写出来看看嘛

好吧,我还是先再测试下吧,如果编译还可以通过就把我的问题写出来
作者: znouy_92    时间: 2014-12-28 20:47
叫我小强 发表于 2014-12-26 21:02
JDK版本为1.8的话,会自动加上final的,有可能是你JDK版本的问题。

哦,难道是软件版本问题,我用的就是jdk1.8的
作者: znouy_92    时间: 2014-12-28 20:50
82387737 发表于 2014-12-26 21:23
内部类的成员变量必须被final修饰。。但是1.8之后,不加也可以,因为默认给你加上了。 ...

哦,原来是这样啊,现在才知道
作者: znouy_92    时间: 2014-12-28 20:51
82387737 发表于 2014-12-26 21:22
java 1.8之后回默认加上final。

哦,原来是这样的,课本上说明了吗
作者: lnscore    时间: 2014-12-28 21:57
看了楼上的评论,我觉得还有一种可能。楼主检查一下是否访问了成员了变量,如果你在成员变量定义了一次,内部类是能直接访问外部成员变量,,在局部只能算是再赋值了。这样加不加final都是可以的
作者: reyzarc    时间: 2014-12-28 22:24
最好把你的代码贴上来,这样的分析才有意义啊
作者: FINE    时间: 2014-12-28 22:26
你的代码在哪里??贴出来!
作者: qowoeo7538    时间: 2014-12-28 22:41
不可能,因为生命周期不一样.




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