标题: 大家给看看这段简单代码 分析下错 [打印本页] 作者: 马雨铎 时间: 2011-7-27 22:44 标题: 大家给看看这段简单代码 分析下错 public class TestScope{
public static void main(String[] args) {
int x = 12;
{
int q = 96;
int x = 3;
System.out.println("x is "+x);
System.out.println("q is "+q); }
q = x;//应该这是这有问题 大家给看看这么改才能让这个程序 顺利运行
System.out.println("x is "+x);
}
}作者: 匿名 时间: 2011-7-27 22:50
看不明白你写的到底是什么意思,你是想做什么?作者: 匿名 时间: 2011-7-27 22:52
你是想把q的值赋给x么?
这样的话,要写成 x = q;作者: 匿名 时间: 2011-7-27 23:08
是啊 我这都瞅了半小时了 没看出来想要问什么 而且问题也不是那作者: 匿名 时间: 2011-7-27 23:21
这个是什么程序哦,兄弟你贴出来的时候看了一下没有,调试过没有哦,你的问题也没有说清楚,我想你是不是想测试一个局部变量和一个全局变量的问题哦。是不是像这样哦:
public class TestScope {
public static void main(String[] args) {
int x = 12;
{
int q = 96;
x = 3;
System.out.println("x is " + x);
System.out.println("q is " + q);
x = q;
System.out.println("x is " + x);
}
}
}作者: 匿名 时间: 2011-7-28 09:26
若局部变量和全局变量同名,则在局部变量的作用域内全局变量会被隐藏,即不再起作用了。
但是您的程序,是在一个局部范围内,定义了两个变量x,所以,您程序的第一个错误是由“变量重复定义”引起的。
范例1:他们需要分居。[code=java]package org.cxy.demo;
public class Demo{
public static void main(String[] args) {
{
int x = 12;
System.out.println("x="+x);
}
{
int x = 3;
System.out.println("x="+x);
}
}
}[/code]第一个x和第二个x分别属于main方法中的不同的子块。 当程序流程执行完第一个块内的代码时,该块内的所有变量都将消失。
因此,执行到第二个块时,不会出现“变量重复定义”。
但是,您的代码,类似于如下:
范例2:他们居然视图同居。[code=java]package org.cxy.demo;
public class Demo{
public static void main(String[] args) {
int x = 12;
{
int x = 3;
System.out.println("x="+x);
}
}
}[/code]此时第一个x属于main方法块,只有在main方法结束后,他才会消失。而程序执行到第二个x时,第一个x并没有消失。
public class Demo{
public static void main(String[] args) {
int x = 3;
{
int q = 96;
}
q = x;//应该这是这有问题 大家给看看这么改才能让这个程序 顺利运行
}
}[/code]当q所在的块被执行完毕后,那么q就消失了,因此在块的外面无法访问到q。