使用静态和非静态变量的数学运算

时间:2014-12-05 14:07:13

标签: java static

我可以乘以静态变量和非静态变量,如下所示:

public class C {  
    protected int c;  
    private static int s;  
    public int ma() { return this.c*this.s; }  
}  

或者:

public class B{  
    protected int x;  
    private static int y;  
    public static int ms() { return x + y; }  
}   

第二个代码不起作用,我想知道是因为它期待静态吗?

2 个答案:

答案 0 :(得分:6)

第二段代码无效,因为msstatic。您无法从static上下文中引用非x成员(static)。

您需要将ms设为非static功能,或将x设为static变量。

像这样:

public class B{  
    protected static int x;  // now static
    private static int y;  
    public static int ms() { return x + y; }  
}   

或者像这样:

public class B{  
    protected int x;  
    private static int y;  
    public int ms() { return x + y; }  // now non-static
}   

答案 1 :(得分:1)

静态变量/函数是在应用程序中共享的变量/函数。在你的第二个例子中

public class B{  
    protected int x;  
    private static int y;  
    public static int ms() { return x + y; }  
}

您的方法声明为静态,因此是静态上下文。经验法则:您无法从静态上下文访问非静态内容。以下是为什么会这样的原因。

假设您有两个B类型的对象,其中x=1一个,x=2。由于y是静态的,因此它们由两个对象共享。让y=0

假设您从程序中的其他位置调用B.ms()。您不是指任何特定的B对象。因此,JVM无法添加x + y,因为它不知道要使用x的值。有意义吗?