黑马程序员技术交流社区
标题:
成员变量同名的局部变量,结果是这样?
[打印本页]
作者:
我能驾驭住
时间:
2012-6-5 23:39
标题:
成员变量同名的局部变量,结果是这样?
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
作者:
金鑫
时间:
2012-6-5 23:43
本帖最后由 金鑫 于 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修饰的成员变量还是普通变量,局部变量都会覆盖掉外部定义的变量。因为程序自上往下运行,与你定义的什么类型的变量无关。
作者:
曹操
时间:
2012-6-5 23:45
成员变量时是在整个类中有效,局部变量只在局部区域有效,如果出现成员变量和局部变量相同时,那么局部已经有这个变量了就不会去外部初始化了,就在局部初始化了。所以结果是5
作者:
朝哥
时间:
2012-6-6 00:04
局部变量只在自己的{}内有效,LZ如果想调用外面的x=3,可以在打印的x前面加上类名,如Lianxi01.x,打印结果是3.
作者:
赵兵锋
时间:
2012-6-6 10:22
哈哈,我理解为就近原则,在近处发现了同名定义的变量,就使用该变量,出了此范围,对于其他句子来说,最近的已定义的变量就是成员变量了。
作者:
王月
时间:
2012-6-6 11:05
首先,要明白程序的执行的顺序,它是从主函数开始,自上而下执行的。
以楼主这个例子来说:
1,局部变量和成员变量最大的区别就在于作用域不同,即作用的范围不同。
所以,如果局部已经有变量,不管和成员变量同不同名,因为作用范围不同,这里的输出语句只能输出局部变量。在LZ的这个例子中,就是会输出5.
2,如果成员变量是静态的,必须类名调用才能执行到,只有这时不会输出5
说的可能多了点,lz不要想的太复杂,不然就太浪费时间了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2