我有一个Java类,其中每个方法被定义为static
。所以我不必重写类,然后取决于它的好几个代码,我通过实例变量添加了一些错误报告。但是,Java似乎无法从类方法访问实例变量。我阅读了Sun的description类变量,并且谨慎地将每个方法都改为此类中的实例方法,而不会更好地理解它在Web应用程序中的工作方式。Java类和实例变量Web应用程序中的内存使用情况?
根据(1),据我所知,类方法共享的对象的所有实例相同的存储位置。那么,在一个Web应用程序中,这是不是意味着每个进程都为静态方法引用相同的内存地址?而且,每个进程又会重新定义所有的实例方法?
如果我要创建一个类变量来跟踪的错误,那不是引入的情况下处理一个可能引发进程B的错误?实例方法是否可以访问类变量?
编辑:
让我澄清一下,我想用一些示例代码来完成。
首先,我的课:
public class MyClass {
public int error = 0;
public String methodA() { // Do some stuff if (ret == null) this.error = 1; return ret; }
public static boolean methodB() { // Same thing but I can't access this.error here } }
现在我的应用程序:
MyClass myClass = new MyClass();
String aString = myClass.methodA();
if (myClass.error != 0) {
out.print("What did you do!?");
return;
}
“这就是为什么有静态字段通常被认为是一个坏事情。” ...除了“常量”(最终基元/不可变),它们是只读的。 – leonbloy 2010-05-12 15:08:13
因此,如果我要重新声明所有的方法作为实例方法(删除静态关键字),那么我不会招致内存损失?也就是说,每个新的页面请求都不需要比静态方法更多的内存。 – 2010-05-12 15:14:37
@jsumners:这将需要你创建至少一个实例,这需要约8个字节加上你定义的任何实例字段 - 换句话说,不值得担心。 – 2010-05-12 15:20:02