java 中什么不能把static 修饰的变量赋值给没有static修饰的变量啊?

例如:
public class TestStatic {
static int vote = 0;
int count;
static void getAll() {
count = vote;
System.out.println(count);
}
}
static 的方法中都不能使用非static的变量吗?为啥啊?

因为在java中static修饰的变量、方法等都是在类加载的时候就开始初始化、分配内存空间等工作。而非static的变量、方法是在程序执行时才开始初始化。因此在static 的方法使用非static的变量的情况就是:static 的方法初始化时却碰到还没有初始化的变量,这时候程序就有问题了。因此static 的方法中是不能使用外部非static的变量,只能使用内部非static的变量。
如:
public class TestStatic {
static int vote = 0;

static void getAll() {
int count = vote; //因为count在static方法里面,在类加载时一并初始化了。
System.out.println(count);
}
}
//这样写就可以了
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-14
通俗点讲:
局部变量若加上static就表示该变量值在函数运行结束后是下一次函数运行时的初始值。
函数包括全局变量若加上static表示其作用范围只在本模块/本文件内可用。

static的变量 和c语言的全局变量意思差不多
普通的变量每一个类的实例都有只属于自己的那一份
而static的变量是属于类的 所有的实例共享同一个static的变量本回答被提问者和网友采纳
第2个回答  2018-10-20
静态方法可以通过类直接调用,但是非静态成员变量在运行时只能通过类对象才能得到,如果赋值是矛盾的,所以静态方法内部不可以使用非静态成员变量。
第3个回答  2015-03-20
如果方法被标记为static,那么只能是用表示static的方法和变量。原因是,被标记为static的方法和变量,是在类加载的时候加入到内存,可以直接使用,值永远只有一份。而非static的方法和变量,要等到类被实例化以后才能使用。你可以这么理解,就是类存在,static的变量和方法就存在,而非static的变量和方法,只有实例存在才存在。望采纳!谢谢。
第4个回答  2015-03-20
上面代码不能赋值是因为Java中的一条原则:静态成员不能访问非静态的成员,你的getAll()方法为静态的,而count为非静态的,违反规则

这条原则的原理是:Static修饰的成员属于类,而非Static修饰的成员属于对象,很有可能调用Static修饰的属性的时候,根本就没有实例化一个对象,当然就会出错了,因此Java有了这条原则
相似回答