java的静态方法中无静态变量,均是非静态变量。。那么就不会有同步问题了吧?

我没说明白,我不调用类的静态变量。。。
我只是在静态方法中定义非静态的成员变量,这个时候没有同步问题,why?
是否,不同人在调用该静态方法时,在内存中,都各自的生了成员变量的内存空间?
所以没有同步问题?

你好!!!
1.首先我们知道静态的变量(包括静态方法)是属于整个类的,不是属于某个对象的,在编译期间,编译器只是把静态变量和静态方法加载到内存中(因为他们属于类不属于某个对,因此系统会为他们单独分配空间,供类的所用对象树使用),而其他的变量和方法都是在为对象开辟空间的时候才被加载到内存中的,想想,要是我们没有定义任何对象的话,那么此时内存中只为静态变量和静态方法分配了空间,并不会局部变量分配空间,此时就没有实现同步。
2.我们知道在定义对象的时候,不同的对象的数据成员(不包括静态),会分配不同的空间,而对象的方法只是在第一个对象定义的时候,才分配空间,要是再定义对象,系统不会为它的方法分配别的空间,只会为普通的数据成员分配空间,那么方法的作用域就是最后一个对象消失以前。要是最后一个对象也消失了,它的作用域也就是消失了。因此静态方法也不例外。静态方法不同于普通方法的主要区别是:和静态数据成员一样,在没用定义对象的时候,就会在内存分配空间,供类的所有对象使用。(可以知道,静态方法的调用是在构造函数以前调用的)。

希望对你有所帮助!!!!
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-16
我只是在静态方法中定义非静态的成员变量,这个时候没有同步问题,why?

首先。。方法里面的变量不叫成员变量叫局部变量。。出了方法就消失的变量。。而成员变量属于对象的。。是随着对象的消失而消失的。。当然静态的除外。。局部变量属于方法。。方法一执行完就完了。。

为什么没有同步问题。。
就是你说的那样。。
是否,不同人在调用该静态方法时,在内存中,都各自的生了成员变量的内存空间?
所以没有同步问题?

方法里面的代码只是一个程序块。。只有在别人调用它的时候才会调到内存里面去执行。。所以别人一调用就会产生各自的局部变量。。
所以没有同步问题。。每个线程操作的变量都是属于自己的。。
第2个回答  2010-09-16
对的 在静态方法中定义的成员变量是不同的 静态方法内部的信息是不持久保存的。
当然 如果你这个方法访问的是固定的访问同一个文件或数据 同步问题还是会出现
第3个回答  2010-09-16
我只是在静态方法中定义非静态的成员变量????
在方法中只能定义局部变量,而局部变量在堆栈里面分配内存,每个线程都有独立的不同的堆栈,所以不存在访问冲突,也就不需要同步了。
第4个回答  2010-09-16
静态方法内只能使用类的静态变量吧,如果一个方法不使用成员变量,这个方法的用用处很少吧
第5个回答  2010-09-16
唉,基本的概念再搞搞清楚吧,定义在方法里面的叫局部变量
相似回答
大家正在搜