为了账号安全,请及时绑定邮箱和手机立即绑定

局部内部类调当前方法的局部变量时,局部变量用final修饰吗?我的jdk版本是1.7的

局部内部类调当前方法的局部变量时,局部变量用final修饰吗?我的jdk版本是1.7的

qq_雨过之后_1 2017-06-25 21:17:28
class NeiClass3{ public static void main(String[] args)  { A a = new A(); a.show(); }}class A{ int num1 = 10; //内部类B class B { int num2 = 20; } //方法 public void show(){ final int num3 = 30; //????????????????????? //局部内部类 class C { int num4 = 40; public void show2(){ //System.out.println("局部内部类show"+num4); System.out.println("局部内部类show"+num3); //System.out.println("局部内部类show"+num1); } } new C().show2(); }}
查看完整描述

3 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

是的,在 1.8 之前,“本地(local)变量”必须声明为 final 才能被“本地内部类(local inner class)”所访问。

在 1.8 中限制放宽了一些:不必须用 final 修饰,只要是“事实常量”就可被 local inner class 访问。

查看完整回答
反对 回复 2017-06-26
?
望远

TA贡献1017条经验 获得超1032个赞

并没有这个限制,final这是修饰常量的,

局部变量用final修饰吗?所以既然是变量就不能用final来修饰。

常量只能在定义的时候完成初始化,并禁止修改常量值。

对方法的局部变量只是要求在定义时完成初始化即给定初值(虽然要求给定初值,但是依旧是变量),因为局部变量的值如果不初始化就是一个随机值,不像属性一般,即便是没有初始化也有一个初始值如:

class Test{
    public int num;//默认初值为0
    public void test()
    {
        int sum=0;//局部变量要求在定义时完成初始化即给定初值
    }
}


查看完整回答
反对 回复 2017-06-25
  • 3 回答
  • 0 关注
  • 1535 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信