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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程有愿 中级黑马   /  2012-7-4 08:58  /  1797 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Out
{     int x=4;
        void methd(final int a)
  {   
            class Inner
            {  final   int  y=5;
                    void show(){
          
                    System.out.println("a="+a);
          
            }
            
            }
            new Inner().show();
        }
        }
public class InnerClassDemon1 {
        public static void main(String[] args){
         Out out=new Out();
          out.methd(6);
          out.methd(7);
         
         }

},为什么还能out.methd(7)呢,虽说老师视频理解了是栈的问题,但是还是不太明白求解释..谢谢

6 个回复

倒序浏览
out.methd(6);  当执行这句话的时候,method(final int a) 中的 final int a 才生成, 他的作用范围为本函数,在本函数内是不能再给它赋值。本函数执行完会销毁
回复 使用道具 举报
你是说定义了final 变量的a 为什么还能改变吧?
这个你可以理解为 a 你传进去什么值 就是什么
作用于这个方法 方法一结束 也就关闭了
所以你再传7的时候 a 就是7
回复 使用道具 举报
执行了out.methd(6)之后,是可以在执行out.methd(7)
你的方法参数中有final int a,是指限制了a在这个方法内是不能改变的而已。
也就是说:不管你传什么值,这个值不能在方法中改变。但你可以多次调用该方法,多次传值。
回复 使用道具 举报
第一次传值和第二次传值没有关系,final的值是不可改变的,但是只限于这个方法内部,第二次调用就已经重新执行了。
回复 使用道具 举报
class Out
{     int x=4;
        void methd(final int a)
  {   
         a++  //这时都不行,你对比着理解吧
            class Inner
            {  final   int  y=5;
                    void show(){
         
                    System.out.println("a="+a);
           
            }
            
            }
            new Inner().show();
        }
        }
public class InnerClassDemon1 {
        public static void main(String[] args){
         Out out=new Out();
          out.methd(6);
          out.methd(7);
         
         }

}
回复 使用道具 举报
是我开始犯糊涂了,所谓的抛出异常比为对象而不是什么类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马