请教个问题:
class canshu
{
int x ;
public static void main(String[] args)
{
canshu obj=new canshu();
obj.x=5;
change(obj);
System.out.println(obj.x);
}public static void change(canshu obj)
{
obj.x=3;
}

}在这个程序中为什么非要定义个全局的int x;才可以呢?难道在堆内存中对象obj的属性x所使用的内存空间为int x创建的么?谢谢了!

解决方案 »

  1.   

    什么问题?.....
    你说的x不定义全局
    change(obj)
    怎么访问哦..
      

  2.   

    其实你的问题应该是值传递和引用传递的问题!
    public static void change(canshu obj)
    {
    obj.x=3;
    }
    这就是引用传递;
    public static void change(int x)
    {
    x=3;
    }
    这就是引用传递!我想对于他们的区别应该不用解释了吧!
      

  3.   

    写错了!
    public static void change(int x)
    {
    x=3;
    }
    这就是值传递!
      

  4.   

    我感觉楼主应该是从C或C++转学过来的,
    java里那野犬为的全局变量一说?
    obj.x为对象的一个属性,你所写的例子只是关于对象的一些基本应用而已,并没有什么特别的地方。
    是不是楼主对面向对象的思想还有些不太熟悉的地方。
    面向对象中的几个概念一定要理解清楚才可以的。
    类,对象,属性,方法,封装,实例化,多态。
      

  5.   

    java的学习我是由牛人张孝祥和孙鑫两个的视频的组合而成的学习,至于面向对象虽然不是说很熟,但是也了解得很多,至于有人说到的全局变量在java中没有这种说法,对此我深表遗憾,因为在张孝祥的课程中常常会提到局部的变量,故而我想到了全局的变量,而且在很多时候理解起来也是很好的。
     令人可惜的是,虽然有些大佬非常热心,但是都除了兜圈以外,没有把问题的实质说出来,首先,那些说我的大佬知道栈内存和堆内存的存储机制么?理解我的问题需要一定的内存操作基础的,包括内存中的堆内存与栈内存的关系,以及对象创建的整个过程中,内存的分配、使用及垃圾内存的回收机制(垃圾回收器)。非常抱歉的是很少有人可以从这些实质的角度帮我解决问题,而是围绕在外围讨论一些空泛的东西。非常感谢gongyali2005() 和male110等,让我明白了一些值传递和引用传递方面的知识等~!谢谢!~我喜欢这种有实质性的解答。
      

  6.   

    Java中没有所谓的“全局变量”。
      

  7.   

    你补充的静态方法会报错.编译不能通过.静态方法不能直接引用实例变量的.靠.估计这家伙还没有学几天JAVA
      

  8.   

    wydcs(天外来痴) :
       我提供的程序是在两台电脑上(xp系统)测试通过的。请检查你拷贝的程序是否因为拷贝等问题出现了错误。
       并请高手帮我从内存使用的角度帮我说明下程序中定义 int x 的必要性,谢谢了!
      

  9.   

    JAVA中类是由“属性+方法”组成。因为你的obj是canshu类,obj只能调用canshu类的属性和方法,你要是把int x放到方法类,那肯定是调用不到的啊。不知道这样解释是不是正确,我个人是这样理解。还请各位共同讨论。
    -----------------------------------------------------------------------------------
    欢迎各位加入<『Ben』J2EE交流群>QQ群:24711176
      

  10.   

    java的学习我是由牛人张孝祥和孙鑫两个的视频的组合而成的学习,至于面向对象虽然不是说很熟,但是也了解得很多,至于有人说到的全局变量在java中没有这种说法,对此我深表遗憾,因为在张孝祥的课程中常常会提到局部的变量,故而我想到了全局的变量,而且在很多时候理解起来也是很好的。
     令人可惜的是,虽然有些大佬非常热心,但是都除了兜圈以外,没有把问题的实质说出来,首先,那些说我的大佬知道栈内存和堆内存的存储机制么?理解我的问题需要一定的内存操作基础的,包括内存中的堆内存与栈内存的关系,以及对象创建的整个过程中,内存的分配、使用及垃圾内存的回收机制(垃圾回收器)。非常抱歉的是很少有人可以从这些实质的角度帮我解决问题,而是围绕在外围讨论一些空泛的东西。非常感谢gongyali2005() 和male110等,让我明白了一些值传递和引用传递方面的知识等~!谢谢!~我喜欢这种有实质性的解答。
    ----------------------------------------------------------------------
    丫丫的呸!!!!
    问问题不能谦虚点么?
    ------------------------------------------------------
    张孝祥和孙鑫这2个SB了不起么?
    他们写的书、说的话,什么局部的变量A之类的,
    (局部的变量,故而我想到了全局的变量,而且在很多时候理解起来也是很好的)
    竟然会让你这个根本不懂OO思想还不懂装懂的人,联想到全局变量,
    只能说明:
      1、他们流得很(本来嘛,Java没全局变量概念,但能实现全局变量1样的作用;java没指针==这些基本东西都不说清楚的人,还好意思出来误人子弟,骗饭吃!)
      2、或者说你流得很!不懂又装懂,还自做聪明!!!
    --------------------------------------------------------------
    令人可惜的是,虽然有些大佬非常热心,但是都除了兜圈以外,没有把问题的实质说出来,首先,那些说我的大佬知道栈内存和堆内存的存储机制么?理解我的问题需要一定的内存操作基础的,包括内存中的堆内存与栈内存的关系,以及对象创建的整个过程中,内存的分配、使用及垃圾内存的回收机制(垃圾回收器)。非常抱歉的是很少有人可以从这些实质的角度帮我解决问题,而是围绕在外围讨论一些空泛的东西。非常感谢gongyali2005() 和male110等,让我明白了一些值传递和引用传递方面的知识等~!谢谢!~我喜欢这种有实质性的解答。
    ----------------------------------------------------------------
    这种话让人听起来很火大
    值传递和引用传递这种基本的东西都不懂
    还吹什么内存操作基础、栈内存
    我感觉你未必9懂内存,windows怎么分块、分页;linux有分块、分页的概念么?
    说老实话,linux kernel我看了2年,但我现在还是不太懂,
    人家说我,我还老老实实的听着
    ----------------------------------------------------
    回答问题还有罪了?
    你以为你是国家主席A!!!!!
    我^你个肺!!!!
      

  11.   

    szuzsq
       丫丫滴,你牛,说了半天还没有说出个道理来。牛个屁!!!!!!!!!!“linux kernel我看了2年,但我现在还是不太懂”这只能说明一个问题,你智力有问题!要不就是你根本不适合学习那个东西。"人家说我,我还老老实实的听着",这只能说明你善于跟风,没有自己的脑袋。
       据上考虑,你真它奶奶的,有问题。
       你爷爷的,有本事从内存的角度帮我把它理清了,那时你说什么本人都服你!!!!