static成员变量属于类,而不是对象,这个清楚。但不能解释static为什么不能应用于方法内的局部变量,我只想这个局部变量作中间值或其他,那编译器为什么会有这个限制?
是不是多个对象同时调用这个方法时,这个局部static变量不好控制?因为static变量只占用一分存储区域。
哪位老大解释下,谢谢!
是不是多个对象同时调用这个方法时,这个局部static变量不好控制?因为static变量只占用一分存储区域。
哪位老大解释下,谢谢!
如果设成静态变量,那JAVA怎么回收被其占用的内存。
楼主是要在方法内部定义static变量吗?
public void test(){
static int a = 1;
}
就是不支持被~~~有啥可以不可以的。~没有不是一样写了很多Java代码吗?
如果你在方法里面定义一个static。这时候编译器就不知道你这个变量怎么初始化了这个是和java的设计相关的。java全是面向对象设计的,单独一个方法不能持有一块空间。
你所能想到的类似C/C++里需要使用方法内部static变量的场合java里通过类成员变量都可以实现
你在方法里面定义的变量是局部变量,就是说他有一定的作用范围和生命周期,就只能在方法里面使用而不能将其扩展到别的地方,这个变量在方法结束后就会被回收器回收,就不再存在了,而你要强制将其加上static就是要把它的作用范围扩展到整个类,这就与你开始定义这个变量时违背了,这是语法上的错误。
建议深刻理解这句话
static成员变量属于类,而不是对象
类的静态变量一样可以满足你的需求。
举个例子吧:static成员方法不能操作非static成员变量(当然,你把对象作为参数传入,再操作成员变量是可以)。语法是这样规定的。为什么这样规定?因为static成员方法不关联某个对象(没有this指针/引用),如果操作成员变量肯定会修改某个对象的状态的,直接操作成员变量肯定是不行的,编译器才会禁止这么做。
男人不能生孩子不是上帝规定的吧?总有理由可以解释吧?
如果需要多次调用包含static局部变量的方法,且需要用到static局部变量上一次的值,这么做也是合理的阿。
static成员变量也可以实现上面说到的功能,如果说编译器为了简单易行,就是不允许static应用于方法内局部变量,那也是原因阿。
各位别激动阿,我当语法规定记着就好。
普通的局部变量他的生命周期只存在与方法中,他不是对象级的更不是类级的,我们需要他是因为我们需要每次调用这个方法时他都会被初始化,这不同于全局变量(创建对象时被初始化),更不同于全局静态变量(类初始化时被初始化)但如果是一个局部静态变量,如果寄存他的方法是静态方法则他的生命周期等同于类的声明周期(等同于全局静态变量),反之如果寄存他的方法是非静态方法,那他的生命周期是不是等同于对象的生命周期(等同于普通全局变量),如果是这样他的存在可以被其他变量所取代,不支持他并不会对程序产生影响,所以java不支持他
Static成员变量不能操作static成员变量的原因是生命周期的问题,static成员方法存在这个类被加载的整个生命周期内,而非static成员变量属于某个对象,它的值可以轻易的被改变,如果static成员方法调用的话会被它的改变值影响到,所以编译器是不会让你调用非static成员变量的...
这就是java规则,想玩,就得按照规则玩。假如让你声明一个局部静态变量,按照你的意思,那所有的方法都可以对该属性进行操作(否则你提的问题没有任何意义),那难道别的方法想操作该变量的时候还要调用初始化局部静态变量的方法?
加入可以使用static修饰局部变量,那么在其他方法里如何访问该变量(访问不到),既然访问不到就和没有一样用编程思想证明
static变量是类的成员,比如班里面的人数,而方法是类的行为,里面没有定义static 变量的需要从内存管理考虑
static 变量会长期存储到内存里,而方法里的static 变量是否长期存到内存中呢?
如果存的话,内存开销太大
1.static 是全局的,或者说是公共的,可修饰变量,方法。 占用一块内存区。置于多次调用,值就是最后一次赋的值。
2.不能被类中非static 方法调用。static 方法可以调用非static方法。因为static 方法是公共的,而非static方法是属于对象调用的。
C/C++中的静态局部变量的概念,Java中完全可以用类成员和访问权限修饰符一起实现。
2、正题不是男人是否可以生孩子,而是这个孩子是谁的?
3、这孩子肯定不是你和我的,嗯PS:LZ是否应该先解释一下为什么一定要在局部声明静态变量?事先在全局声明好了不是可以一样用在局部么...