黑马程序员技术交流社区
标题:
静态方法的问题?
[打印本页]
作者:
程宏志
时间:
2012-11-19 23:59
标题:
静态方法的问题?
今天碰到一个很纠结的问题?
静态方法中是否可以处理非静态属性?
这个答案很有争议,大家都知道静态方法中是不能调用实例属性的,我们往往强调的是调用,可是处理和调用的概念感觉有很大的出入,我的理解是通过对象来调用实例属性是否也是一种处理呢?
大家给点意见,帮忙判断下!
作者:
徐军涛
时间:
2012-11-20 00:33
对于静态我们一般只关心:静态成员变量、静态方法
因为声明周期的问题,静态是有局限性的:静态方法只能调用静态成员
举个例子:
假定,有一个求圆面积的静态方法,我们把半径 PI 声明成static final
半径是未知的,所以就需要传入参数,这个参数就是非静态的
从参数来看,静态方法,是可以处理非静态的属性的。
但是,调用的时,只能是静态调用静态
作者:
刘菲
时间:
2012-11-20 08:24
本帖最后由 刘菲 于 2012-11-20 10:10 编辑
楼主你好,对于你提出的问题我是这样理解的。
1.我们通常强调静态方法只能访问静态成员(方法和变量)。
这里所说的访问其实也不光是指调用。
2.静态方法虽然不能调用非静态成员,但它却能处理非静态成员。
主函数就是个很好的例子,我们通常在主函数内可以处理静态的,也可以处理非静态的。
作者:
初艳春
时间:
2012-11-20 09:20
从内存方面解释:静态方法在编译器在编译时会为其和其变量分配内存空间,如果引用了一个非静态的变量,那么在非静态变量作用结束后,这个变量就会消失,那么为它分配的那块内存就成了无用内存,但却无法回收,这样就造成了内存泄露,这样显然不合理。所以java中规定,静态方法不能直接调用非静态的方法或属性。
作者:
陈军
时间:
2012-11-20 10:43
我的理解: 程序处理很多种,调用只算是一种。
一般java中静态方法不能处理非静态成员,是因为非static成员属于对象,
而我们在类静态方法内部设计的时候,一般还没有对象,所以不能处理非static成员。
如下面这个例子:
public class Test9 {
int i=0;
public static void main(String[] args) {
}
public static void add(){
Test9 t=new Test9();
t.i =6;//有了对象才能处理
}
}
所以LZ。你别纠结这种问题了。。。文字游戏不好玩的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2