x 是类作用域;
y 是块作用域(方法作用域);
cube,paint也是类作用域;
ypos 是块作用域。区分的方法,就是看该变量“是在哪里‘声明’的”。
y, yPos 都是在各自的方法体内声明的,所以是该方法的“块作用域”,离开了该块就不可见了。
    块是可以嵌套的,比如类作用域就包含了方法的作用域。外层作用域的变量在内层仍然可见,反之则不行。JAVA有个特别处理,就是如果外层跟内层的变量声明都用了同一个名字的话,它会报错——它要让你确认,你是想引用外层的变量,还是想令立门户——这是JAVA在编译期的一个安全措施,类似于变量没有初始化的报错一样。作用域主要的作用是消除命名冲突,在写大的程序和多人合作时会很有效;
反之如果不区分作用域,则出现名字冲突的机会很高~~~想象一下,每定义一个变量,都要反复查找整个程序的所有代码看是否有名字冲突——那是多么痛苦的事情。但有了作用域,只需要在当前的作用域里查找即可——作用域大小划分恰当的话,编码是一件很快乐的事情。

解决方案 »

  1.   

    x 是类作用域;
    y 是块作用域(方法作用域);
    cube,paint也是类作用域;
    ypos 是块作用域。区分的方法,就是看该变量“是在哪里‘声明’的”。
    y, yPos 都是在各自的方法体内声明的,所以是该方法的“块作用域”,离开了该块就不可见了。
        块是可以嵌套的,比如类作用域就包含了方法的作用域。外层作用域的变量在内层仍然可见,反之则不行。JAVA有个特别处理,就是如果外层跟内层的变量声明都用了同一个名字的话,它会报错——它要让你确认,你是想引用外层的变量,还是想令立门户——这是JAVA在编译期的一个安全措施,类似于变量没有初始化的报错一样。作用域主要的作用是消除命名冲突,在写大的程序和多人合作时会很有效;
    反之如果不区分作用域,则出现名字冲突的机会很高~~~想象一下,每定义一个变量,都要反复查找整个程序的所有代码看是否有名字冲突——那是多么痛苦的事情。但有了作用域,只需要在当前的作用域里查找即可——作用域大小划分恰当的话,编码是一件很快乐的事情。
    完全COPY楼上的。嘿嘿。(强调而已) 将“流氓无赖”测试到底
    ——始于2003年7月
    树欲止而风不停,行云流水匆匆去;
    树梢蚂蚱凭空望,江边浪花碎巨石; 支持“流金岁月”!!!
    发送框,少个“右键菜单,选择粘贴”;
    ——2003年12月24日am^@^
      

  2.   

    y, yPos 都是在各自的方法体内声明的
    此话怎么解释  就是 ypos是在public void paint(Graphics g){
                            int yPos=25;
                       中的变量,那么它就是块作用域了?   变量是在 paint方法中定义的怎么能知道 就是块作用域
      

  3.   

    可能我没有说清楚概念……我觉得,方法(C里叫函数)作用域 不应该跟 块作用域 混在一起说。
        方法作用域 就是“仅”在一个方法里起作用的变量。包括在 方法的参数表内声明的名字 和 在方法体内声明的变量。
        块作用域,我想理解为 在方法体内用{}括起来的区域 可能要形象一些。比如 if{}else{}; while(..){}等。也可以单用{}括起一段语句,如:
         void f(){
            ....
            {
              int i=0;
            }//只用{}括起来也可以成为一个块。
           i = 1; //编译报错,i 不可见。
         }我觉得这东西也不必太可以去记忆,应该在实践中来体会……毕竟书上说的也是个 规则,以它 引导思维,而不是凡事都靠它来判断~~好累。就像我在这里说的乱七八糟,但在实际里还是基本可以区分的。