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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李斌 于 2012-5-22 11:22 编辑

如题,求解释哦~~

class   A1
{
public   void   shout (int   iargs)
{
                class   B
                {
                                public   void   shout1(int   a)
                                {
                                        System.out.println(a);
                                }

                }

                B   b   =   new   B();
                b.shout1(iargs);
}
}

class   Test2


{
                public   static   void   main(String   []   args)
                {
                        A1   a   =   new   A1();
                        a.shout(5);
                }
}

















评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

2 个回复

正序浏览

回帖奖励 +1 黑马币

本帖最后由 麦田里的守望者 于 2012-5-22 11:54 编辑

你这个应该不是在内部类中引用,而且你那个内部类在外面。我记得java内部类只能访问final类型局部变量,内部类不能访问方法局部变量,想访问必须final,因为内部内是一个类,是在堆内存里,创建对象也在堆内存,在内部内访问方法的局部变量就是栈内存的局部变量,用堆内存的数据去访问栈内存的数据是访问不到的,因为堆内存比栈内存存活时间长,所以加上final则变量就变成常量,常量是放在常量池也在堆内存,所以存活时间一样长.

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报

回帖奖励 +1 黑马币

本帖最后由 冯越 于 2012-5-22 11:32 编辑

我去~ 你这明显理解有误
java规定在内部类的内部只能访问final型的局部变量。可你这明显不是在内部类中引用,而你是在内部类B外面,外部类A1的shout方法内去使用当然不需要使用final关键字了。
如果你在内部类B内部是使用局部变量 iargs 那shout方法中定义的局部变量就必须是  final int iargs了。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马