黑马程序员技术交流社区

标题: 求解释啊 [打印本页]

作者: 程有愿    时间: 2012-7-4 08:58
标题: 求解释啊
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)呢,虽说老师视频理解了是栈的问题,但是还是不太明白求解释..谢谢
作者: 唐辉辉    时间: 2012-7-4 09:08
out.methd(6);  当执行这句话的时候,method(final int a) 中的 final int a 才生成, 他的作用范围为本函数,在本函数内是不能再给它赋值。本函数执行完会销毁
作者: 王明明    时间: 2012-7-4 09:11
你是说定义了final 变量的a 为什么还能改变吧?
这个你可以理解为 a 你传进去什么值 就是什么
作用于这个方法 方法一结束 也就关闭了
所以你再传7的时候 a 就是7
作者: 韦念欣    时间: 2012-7-4 09:12
执行了out.methd(6)之后,是可以在执行out.methd(7)
你的方法参数中有final int a,是指限制了a在这个方法内是不能改变的而已。
也就是说:不管你传什么值,这个值不能在方法中改变。但你可以多次调用该方法,多次传值。
作者: 杨朔    时间: 2012-7-4 12:48
第一次传值和第二次传值没有关系,final的值是不可改变的,但是只限于这个方法内部,第二次调用就已经重新执行了。
作者: 邵阳    时间: 2012-7-4 12:53
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);
         
         }

}
作者: 程有愿    时间: 2012-7-7 20:05
是我开始犯糊涂了,所谓的抛出异常比为对象而不是什么类




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