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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package Lianxi;

public class Lianxi01 {

        /**
         * @param args
         */
        static int x=3;
        public static void main(String[] args) {
                int x=5;
                // TODO Auto-generated method stub
          System.out.println(x);
        }

}
结果:
5

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 金鑫 于 2012-6-5 23:56 编辑

public class Temp {
        int x=3;
        public static void main(String[] args) {
                int x=5;
                System.out.println(x);
        }

}
把外部的变量定义为普通变量,结果仍然是5;

class TEMP {
   int i =3;
   
   public static void fangfa(){
    //在方法内定义一个普通变量,该普通变量会覆盖掉方法外部定义的变量 int i =3;
    int i =6;
    System.out.println(i);
   }

public static void main(String[] args) {
         fangfa();
}
}
调用fangfa(),输出的是6,方法内的局部变量会覆盖掉外部的int i =3;

无论你外部定义的 int i = 3是static修饰的成员变量还是普通变量,局部变量都会覆盖掉外部定义的变量。因为程序自上往下运行,与你定义的什么类型的变量无关。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
成员变量时是在整个类中有效,局部变量只在局部区域有效,如果出现成员变量和局部变量相同时,那么局部已经有这个变量了就不会去外部初始化了,就在局部初始化了。所以结果是5

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
局部变量只在自己的{}内有效,LZ如果想调用外面的x=3,可以在打印的x前面加上类名,如Lianxi01.x,打印结果是3.
回复 使用道具 举报
哈哈,我理解为就近原则,在近处发现了同名定义的变量,就使用该变量,出了此范围,对于其他句子来说,最近的已定义的变量就是成员变量了。
回复 使用道具 举报
首先,要明白程序的执行的顺序,它是从主函数开始,自上而下执行的。

以楼主这个例子来说:
1,局部变量和成员变量最大的区别就在于作用域不同,即作用的范围不同。
     所以,如果局部已经有变量,不管和成员变量同不同名,因为作用范围不同,这里的输出语句只能输出局部变量。在LZ的这个例子中,就是会输出5.
2,如果成员变量是静态的,必须类名调用才能执行到,只有这时不会输出5

说的可能多了点,lz不要想的太复杂,不然就太浪费时间了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马