Java static关键字为什么不能应用于局部变量? static成员变量属于类,而不是对象,这个清楚。但不能解释static为什么不能应用于方法内的局部变量,我只想这个局部变量作中间值或其他,那编译器为什么会有这个限制?是不是多个对象同时调用这个方法时,这个局部static变量不好控制?因为static变量只占用一分存储区域。哪位老大解释下,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 按照LZ对static局部变量的理解,这个与类变量有何区别? 局部变量最好不要设成静态变量,局变变量是有生命周期的,用完后JAVA很快就回收资源了。如果设成静态变量,那JAVA怎么回收被其占用的内存。 建议楼主贴个代码楼主是要在方法内部定义static变量吗?public void test(){ static int a = 1;} 例子就是4楼所示,为什么java不允许?c/c++都可以这么用。 就是不支持被~~~有啥可以不可以的。~没有不是一样写了很多Java代码吗? 楼主你没喝酒吧?static本来就只能修饰静态变量、全局变量你干吗非得强迫他修饰局部变量呢?你这问题就相当于“为什么男人不能用于生孩子???????????”......... static 变量是给类用的。这样类初始化的时候,就会给static进行初始化如果你在方法里面定义一个static。这时候编译器就不知道你这个变量怎么初始化了这个是和java的设计相关的。java全是面向对象设计的,单独一个方法不能持有一块空间。 真不明白楼主为什么非要定义局部的static变量,这样的定义有任何意义吗??没必要啊…… 再进一步,为什么java不支持方法里的static变量,答案是因为不!需!要!你所能想到的类似C/C++里需要使用方法内部static变量的场合java里通过类成员变量都可以实现 你既然清楚static的变量是类的,哪就应该知道为什么啊,你在方法里面定义的变量是局部变量,就是说他有一定的作用范围和生命周期,就只能在方法里面使用而不能将其扩展到别的地方,这个变量在方法结束后就会被回收器回收,就不再存在了,而你要强制将其加上static就是要把它的作用范围扩展到整个类,这就与你开始定义这个变量时违背了,这是语法上的错误。建议深刻理解这句话static成员变量属于类,而不是对象 static能修饰局部变量和全局变量 C/C++和java的区别呗,适应了就好。类的静态变量一样可以满足你的需求。 各位老大别激动阿,我滴酒不沾。举个例子吧:static成员方法不能操作非static成员变量(当然,你把对象作为参数传入,再操作成员变量是可以)。语法是这样规定的。为什么这样规定?因为static成员方法不关联某个对象(没有this指针/引用),如果操作成员变量肯定会修改某个对象的状态的,直接操作成员变量肯定是不行的,编译器才会禁止这么做。男人不能生孩子不是上帝规定的吧?总有理由可以解释吧?如果需要多次调用包含static局部变量的方法,且需要用到static局部变量上一次的值,这么做也是合理的阿。static成员变量也可以实现上面说到的功能,如果说编译器为了简单易行,就是不允许static应用于方法内局部变量,那也是原因阿。各位别激动阿,我当语法规定记着就好。 知道 this是干嘛的不? 知道this 了 在想static 是不是可以这样解释普通的局部变量他的生命周期只存在与方法中,他不是对象级的更不是类级的,我们需要他是因为我们需要每次调用这个方法时他都会被初始化,这不同于全局变量(创建对象时被初始化),更不同于全局静态变量(类初始化时被初始化)但如果是一个局部静态变量,如果寄存他的方法是静态方法则他的生命周期等同于类的声明周期(等同于全局静态变量),反之如果寄存他的方法是非静态方法,那他的生命周期是不是等同于对象的生命周期(等同于普通全局变量),如果是这样他的存在可以被其他变量所取代,不支持他并不会对程序产生影响,所以java不支持他 其实男人是可以生孩子的,至少在国外已经实现了..Static成员变量不能操作static成员变量的原因是生命周期的问题,static成员方法存在这个类被加载的整个生命周期内,而非static成员变量属于某个对象,它的值可以轻易的被改变,如果static成员方法调用的话会被它的改变值影响到,所以编译器是不会让你调用非static成员变量的... 用static修饰后的变量不就充当了全局变量了。 ...你清楚是局部变量也就应该明白只有当前函数能够使用这个变量static属性(类属性)与对象属性都是全局变量 所以可以加这些修饰符 蛋疼的问题!这就是java规则,想玩,就得按照规则玩。假如让你声明一个局部静态变量,按照你的意思,那所有的方法都可以对该属性进行操作(否则你提的问题没有任何意义),那难道别的方法想操作该变量的时候还要调用初始化局部静态变量的方法? static在程序初始化之前已经初始化好了。你把局部变量写出static,但是局部变量一般是在方法里。方法都没有调用,你就实例化里面的变量。这样做岂不是多此一举。LZ在钻牛角尖 看来就是语法规定,但不见得高明到哪里,当然c++也视局部静态变量为有作用域的类共享,蛋疼ing。某些javaer不要混淆了静态和全局的概念,这是两码事。 对呀 局部变量定义成static的话 第一次被调用到包含局部static变量的方法后被初始了,就一直存在内存里面了,不好回收吧? 反正法好证明加入可以使用static修饰局部变量,那么在其他方法里如何访问该变量(访问不到),既然访问不到就和没有一样用编程思想证明static变量是类的成员,比如班里面的人数,而方法是类的行为,里面没有定义static 变量的需要从内存管理考虑static 变量会长期存储到内存里,而方法里的static 变量是否长期存到内存中呢?如果存的话,内存开销太大 额 这个要扯很远的 还有类变量之分 他们存放的地方都不一样,类变量和class对象一起存放在了方法区,而局部变量存放在栈中,一个线程对应一个栈,局部变量是有生命周期的随着线程的消亡或者方法的执行结束就消亡了,而类变量不会.....(额,我不多说了,要扯真的可以扯很多的)他们根本不是一个概念 1.static 是全局的,或者说是公共的,可修饰变量,方法。 占用一块内存区。置于多次调用,值就是最后一次赋的值。2.不能被类中非static 方法调用。static 方法可以调用非static方法。因为static 方法是公共的,而非static方法是属于对象调用的。 当河上已经有了桥的时候,就不需要再修个隧道了。C/C++中的静态局部变量的概念,Java中完全可以用类成员和访问权限修饰符一起实现。 因为java的内存回收机制决定的,静态变量和临时变量占用的内存区块是不一样的,如果按照你的那个把局部变量也可以static的话,那java是没办法回收的,而且假如局部变量在方法内部,多线程的时候调用频繁,那这个值怎么控制?,且线程结束无法释放,很容易内存溢出,百害而无一利。 局部变量都是方法调用完了 资源就释放了 当然不能用static修饰 在成员函数前面加static不就达到lz想要的效果了么 静态局部变量是C++的东西,在JAVA里类的成员变量,可以实现相同的功能 这。。够激烈,让我知道了static的用法!!哈哈 9楼正解,你了解一下java代码在内存中的分配情况吧,static是有专门的存放区的,你写在局部里面,编译的时候玩不了啊 static是特指,既然是特指,那就不能是局部的,比如国家主席,你能够说他是那个省的主席吗 1、男人可以生孩子,不论是用现代技术还是自然选择,只不过几率比较小。2、正题不是男人是否可以生孩子,而是这个孩子是谁的?3、这孩子肯定不是你和我的,嗯PS:LZ是否应该先解释一下为什么一定要在局部声明静态变量?事先在全局声明好了不是可以一样用在局部么... swing jtable 图片缓存问题 【java新手 求教书籍】 一道面试题 我的JDK版本为jdk-1_5_0_02请问如何升级到最新版本? 关于JNI和GCC GUI组件容器刷新问题 投石问路这里有没有钻石级的人物--放弃c#改学java来了 菜鸟求助,一个简单的applet 程序 Java 基础问题,String ss[]=new String[]{"11","222","33333"}; 和String ss[]={"11","222","33333"}有什么区别 java指针相关 Jtable 获取宽度问题,请高人指点 Smack文件传输的问题
如果设成静态变量,那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是否应该先解释一下为什么一定要在局部声明静态变量?事先在全局声明好了不是可以一样用在局部么...