在方法中为什么不能定义static变量?

时间:2020-12-23 00:42:28
程序1:
public class Hello {
public static void main(String[] args) {
 int  i=0;
System.out.println(i);
}
}


程序2:
public class Hello {
public static void main(String[] args) {
static int  i=0;
System.out.println(i);
}
}

程序1可以,程序2为什么就不行了?static int  i=0;错在哪里了?
如果这样写又可以
public class Hello {
                  static int  i=0;
public static void main(String[] args) {
System.out.println(i);
}
}
请大家帮忙,谢谢!!

15 个解决方案

#1


我只知道static可以修饰成员变量和方法。也就是
class xxx{
static int iii;
static ccc(){
...}}
这样的。具体为什么也没想过,等哪位解释解释吧

#2


是不是是因为static修饰的变量是静态变量的原因啊?
静态变量的定义。

#3


static是成员变量及方法的修饰符,是属于类本身的数据字段,在加载类时就已经初始化,为内存中保存.在方法体内声明的只是局部临时变量,当方法体结束后,这些临时变量会自动销毁,释放缓存空间,所以用static来修饰临时变量,是说不过去的!

#4


俺一般就直接不用
:)

#5


在程序启动的时候要将所有的static变量初始化,你写在方法中JDK可能会看不到这个东东;再说没有人像你那么用的O。

#6


public class Hello {
public static void main(String[] args) {
static int  i=0; //Illegal modifier for parameter i; 
                                   //only final is permitted.
System.out.println(i);
}
}

---初学者

#7


static是类层次的东西,当然在main中定义static int  i=0;是错误的

#8


“类层次”?!好概念!

#9


static是成员变量及方法的修饰符,是属于类本身的数据字段,在加载类时就已经初始化,为内存中保存.在方法体内声明的只是局部临时变量,当方法体结束后,这些临时变量会自动销毁,释放缓存空间,所以用static来修饰临时变量,是说不过去的!


//已经很清楚了吧,

#10


我认为static变量的作用范围是在程序生命周期内存在的,方法它只是在调用的时候临时存在的,
我认为static变量定义在方法中用一个比喻是:大脚穿小鞋,配不上

#11


static是不属于方法的,是属于一个类的,
是在类加载的时候执行的(也就是初始化),
而方法则是在类实例化的时候才开始执行,
你在方法里定义static当然行不通了
另楼主应该注意,初始化和实例化的区别

#12


搂主已经说的很清楚了阿  为什么还不结贴?

#13


我觉得这个理由太迁强

#14


我觉得首先 局部变量声明不能使用可以应用于实例变量的多数修饰符 唯一可以应用于局部变量的修饰符是final.所以把static用于局部变量是不对的.  还有就是static的变量和方法是属于类的.

#15


在C语言的函数里,是可以有static变量的,它的生存空间跟外部的static相同,在堆上。但只限于该函数内使用。个人认识没多大用处,而且使代码难于理解。大概java也是出于这个原因,没有提供这个功能。

#1


我只知道static可以修饰成员变量和方法。也就是
class xxx{
static int iii;
static ccc(){
...}}
这样的。具体为什么也没想过,等哪位解释解释吧

#2


是不是是因为static修饰的变量是静态变量的原因啊?
静态变量的定义。

#3


static是成员变量及方法的修饰符,是属于类本身的数据字段,在加载类时就已经初始化,为内存中保存.在方法体内声明的只是局部临时变量,当方法体结束后,这些临时变量会自动销毁,释放缓存空间,所以用static来修饰临时变量,是说不过去的!

#4


俺一般就直接不用
:)

#5


在程序启动的时候要将所有的static变量初始化,你写在方法中JDK可能会看不到这个东东;再说没有人像你那么用的O。

#6


public class Hello {
public static void main(String[] args) {
static int  i=0; //Illegal modifier for parameter i; 
                                   //only final is permitted.
System.out.println(i);
}
}

---初学者

#7


static是类层次的东西,当然在main中定义static int  i=0;是错误的

#8


“类层次”?!好概念!

#9


static是成员变量及方法的修饰符,是属于类本身的数据字段,在加载类时就已经初始化,为内存中保存.在方法体内声明的只是局部临时变量,当方法体结束后,这些临时变量会自动销毁,释放缓存空间,所以用static来修饰临时变量,是说不过去的!


//已经很清楚了吧,

#10


我认为static变量的作用范围是在程序生命周期内存在的,方法它只是在调用的时候临时存在的,
我认为static变量定义在方法中用一个比喻是:大脚穿小鞋,配不上

#11


static是不属于方法的,是属于一个类的,
是在类加载的时候执行的(也就是初始化),
而方法则是在类实例化的时候才开始执行,
你在方法里定义static当然行不通了
另楼主应该注意,初始化和实例化的区别

#12


搂主已经说的很清楚了阿  为什么还不结贴?

#13


我觉得这个理由太迁强

#14


我觉得首先 局部变量声明不能使用可以应用于实例变量的多数修饰符 唯一可以应用于局部变量的修饰符是final.所以把static用于局部变量是不对的.  还有就是static的变量和方法是属于类的.

#15


在C语言的函数里,是可以有static变量的,它的生存空间跟外部的static相同,在堆上。但只限于该函数内使用。个人认识没多大用处,而且使代码难于理解。大概java也是出于这个原因,没有提供这个功能。