方法中的内部类访问方法局部变量

就是上边这个程序,变量b=10,如果不加final,在dos环境下编译居然可以,这是为什么?请问大侠... 就是上边这个程序,变量b=10,如果不加final,在dos环境下编译居然可以,这是为什么?请问大侠 展开
 我来答
jamxval
2014-08-31 · TA获得超过6822个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1431万
展开全部

应该不可以吧,这不符合Java语法规定。

可能是你做试验的过程有什么问题,我也试过一次从命令行编译你的代码但去掉了 final int b = 10; 中的 final,依然有下面这样的编译错误啊。

J:\>JavaEnv\J2SE7.X64\bin\javac Inner04.java
Inner04.java:13: 错误: 从内部类中访问本地变量b; 需要被声明为最终类型
          System.out.println("Score :" + (score + a + b));
                                                                            ^
1 个错误

 出错的源码:

class Outer
{
int score = 30;
void show(final int a)
{
int b = 10;
class Inner
{
void display()
{
    System.out.println("Score :" + (score + a + b));
}
}
Inner in = new Inner();
in.display();
}
}

public class Inner04
{
public static void main(String[] args)
{
Outer ou = new Outer();
ou.show(16);
}
}
追问
原则上是应该错的,但实际上在DOS系统下确实是正确的,但是在Eclipse重编译,却是错的,所以很纠结,到底什么原因~~
追答
我是在命令行下编译那个文件也是错误的啊,你的试验过程是什么样的,像我上面那样把 DOS 窗口的内容贴出来看看。
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式