java方法中用static修饰变量为什么会出错?

public class Test {

public int m(){
static int i=0;//这里为什么会提示错误呢?
i++;
return i;
}

public static void main(String[] args) {
Test t=new Test();
t.m();
int j=t.m();
System.out.println(j);

}
}

static是用来修饰类成员的啊,不能用来修饰局部变量。

static意为静态修饰符,也就是说一个类在编译的时候,这个类中用static修饰的变量就已经存在了,而public int m(){}是在类实例化的时候才会有的。如果将static放入public int m(){} 方法中,就得出结论:static int i存在了, public int m(){}却不存在,这不是很矛盾吗?
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-04
static只能用在类的属性里,不能用在方法的局部变量里
第2个回答  2013-09-04
楼主这个代码目的是这样的吧。是想看看static静态变量 和普通变量的区别
但这里出错的原因是 static只能修饰成员变量,如果

public class Test {
static int i=0;//写在这里 不会报错 因为这样i是Test对象的成员变量
public int m(){

i++;
又因为是static变量 内存里只有一个i 所以 i的值一直叠加 最后输出2
而如果不用static关键字 用int i=0 普通变量的话 最后输出的是1 因为
t.m();这个方法没有传给实际变量 所以i不会被保存

希望对你有所帮助

java方法中用static修饰变量为什么会出错?
static是用来修饰类成员的啊,不能用来修饰局部变量。static意为静态修饰符,也就是说一个类在编译的时候,这个类中用static修饰的变量就已经存在了,而public int m(){}是在类实例化的时候才会有的。如果将static放入public int m(){} 方法中,就得出结论:static int i存在了, public int m()...

JAVA中static修饰成员变量时 和 不修饰成员变量时的区别 如下面的两个...
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。1、static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:对于静态变量在内存...

Java中,在main方法中定义如下变量,结果报错,static float b = 10.98f...
方法内的变量为局部变量,它的作用域是整个方法体,也就是说,当方法结束的时候该变量的空间也会被释放掉。而使用static修饰的变量为类变量,一旦定义,常驻内存,这与局部变量的定义是矛盾的。望楼主采纳。

java中Static为什么不能修饰abstract?
而非static的方法是属于某个对象的方法,在这个对象创建时,在对象的内存中拥有这个方法的专用代码段;

java中什么时候该用static修饰方法?有什么好处或者坏处?
当一个方法或者变量需要初始化加载,或者是经常被调用的时候可以加上static。用static修饰的方法可以用类名直接调用,不用的一定要先实例化一个对象然后才可以调用 比如 person这个类里面有一个方法public static add(){} 那么可以直接用person类调用 person.add();当然也可以用下面的方法先出一个对象在...

java中Static为什么不能修饰abstract的方法
因为static 方法是类方法,它是不允许子类覆写,而abstract方法是没有实现的方法,是必须由子类来覆写的。如果可以这样的话,那岂不矛盾?static修饰的方法会有具体的实现,而abstract肯定没有具体的实现,两个完全冲突的修饰关键词 怎么可能会放在一起使用呢?

java里,在Main函数里定义Static方法,然后调用,为什么会出错
Main函数本质上也是个方法,只不过是程序的运行起点而已。你不能在方法里面定义方法啊,这样会有语法错误,js这种函数式编程语言是允许的,但是java不行的。所以你只能在main函数外写好,然后再调用这个静态方法。记住一点:java方法内部不能定义方法 ...

java static使用问题
如果定义的是全局变量并且没有定义静态变量,那方法已经加载了,变量还没有被加载,那你说,方法里若引用了还没加载的a,会有问题么?肯定会嘛。至于为什么在方法里定义a的时候不能是static,因为局部变量就是不能定义为静态,这是由于不可能方法还没加载就把方法里的变量加载了,是吧?所以,总结一下...

java static方法调用问题详解
static翻译过来是静态,这个玩意儿修饰的东西被加载到内存的时候,对象还没有,所以不能有this。B没问题。C只要访问权限允许,随便哪里的都可以调用。D只要在静态方法中创建了实例的对象,是可以通过实例调用实例方法的,不过D项所表达的意思似乎比较模糊 ...

java中static什么时候使用,知道static是静态变量,但是不怎么清楚,到 ...
static 除非必要的时候 不建议使用, 因为static是程序刚启动的时候 就加加载static进内存。这样就算你的业务代码没使用这个static对象,这个static对象也已经在内存里了。而且知道你程序退出,虚拟机才会销毁他,这意味着static是必须占用系统资源。什么时候用的话,这个根据上面那段话就很容易理解了。因为他...

相似回答