在方法内部定义的叫“局部变量”,而不是静态变量,局部变量不能加static,包括protected, private, public这些也不能加。静态变量是定义在类中,方法体外面的。
如果你清楚JVM,应该知道局部变量是保存在栈中的,而静态变量保存于方法区,局部变量出了方法就被栈回收了,而静态变量不会,所以在局部变量前不能加static关键字。
静态即:一个数据成员或方法属于它所在的类,而不象一般数据成员或方法,只属于它所在的对象,对象不同,数据成员的值也不同。 静态方法里的变量是临时变量,只在静态方法里有效。而声明STATIC表示该变量属于类。静态变量相当于C语言的全局变量.既然加了static的变量是类一级数据成员,有什么理由放在一个方法里面。方法里面的应该是局部的只有本方法才会用的,在方法里面声明一个类一级的数据成员有何意义呢? 所以JAVA不允许这样做。 要提醒一下,一般的方法同样不能声明静态数据成员。
Java 在方法的内部是不能够定义静态变量的,可以将它定义为类变量。
public class Test{
static int i = 5; //将i 定义为类 的静态变量。
public static void f() {
//static int i = 5;//line 1
}
}
static修饰的是类变量也就是静态变量,作用域是整个类中。 而方法中定义的变量是局部变量,作用域只在于这个方法中。 如果用static修饰的话不就矛盾了,所以方法中定义的变量不允许用static修饰
在Java 中方法中都不能有 static 修饰的变量
C/C++中可以