class  MethodDemo {
private int swp = 10; public void scopeDemo() {
int data = 100;
System.out.println("hello");
} public int getData() {
return swp;
} public void setData(int data) {
swp = data;
}
}public class MethodMember {
public static void main (String[] args) {
MethodDemo methodDemo = new MethodDemo();
//methodDemo.scopeDemo();
System.out.println(methodDemo.getData()); methodDemo.setData(100);
System.out.println(methodDemo.getData());
}}输出结果为:10,100
请问第一个输出值为什么会是10??????

解决方案 »

  1.   

    错啦//methodDemo.scopeDemo();
    没有注释掉正确代码如下class  MethodDemo {
    private int swp = 10; public void scopeDemo() {
    int data = 100;
    System.out.println("hello");
    } public int getData() {
    return swp;
    } public void setData(int data) {
    swp = data;
    }
    }public class MethodMember {
    public static void main (String[] args) {
    MethodDemo methodDemo = new MethodDemo();
    methodDemo.scopeDemo();
    System.out.println(methodDemo.getData()); methodDemo.setData(100);
    System.out.println(methodDemo.getData());
    }}
      

  2.   

    MethodDemo methodDemo = new MethodDemo();
    methodDemo.scopeDemo(); //输出hello,执行完之后data超出作用域,所以失效
    System.out.println(methodDemo.getData()); //得到swp默认值10,所以输出10
    methodDemo.setData(100); //调用setData方法,改变对象methodDemo的swp的值为100
    System.out.println(methodDemo.getData()); //所以输出100
      

  3.   

    其实这只是考察一个变量的作用域的问题public void scopeDemo() {
            int data = 100;
            System.out.println("hello");
        }中的data是一个局部变量,它只在当前函数内有效!
    public void setData(int data) {
            swp = data;
        }
    中的data又是另一个局部变量,和scopeDemo中的不是同一个变量!!!
      

  4.   

    java 加载时,是执行的从上往下的顺序的(没有mail和特殊的方法时),这样的话,就可解释清楚啦!
      

  5.   

    第一个肯定输出10啊,有没有调用scopeDemo都没影响。因为scopeDemo只是定义了一个局部变量data,跟swp的值和setData(int data)里的data变量都没有任何关系。
      

  6.   

    这里调用了scopeDemo()方法也不影响什么,出了{}data=100就失效了。打印出的是初始化为10的swp。
      

  7.   

    methodDemo.scopeDemo(); //输出hello,执行完之后data超出作用域,所以失效
      

  8.   

    没什么奇怪的吧,输出hello之后,scopeDemo() 里的局部变量data在内存中已经消失;
    接着methodDemo.getData()所得到的是MethodDemo 的成员变化swp>10当然输出10了;
    紧接着setData方法把swp设置为100,再getData后输出swp>100
    结果  hello 10 100
      

  9.   

    搞定全局变量和局部变量的区别就行了
    接分 闪人
    ----------------------------------------------------
    Quietly through .....
      

  10.   

    不是说方法名叫getData,它get出来的就是data的……
      

  11.   

    System.out.println(methodDemo.getData());这句调用时Data还未赋值