我可以乘以静态变量和非静态变量,如下所示:
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; }
}
第二个代码不起作用,我想知道是因为它期待静态吗?
答案 0 :(得分:6)
第二段代码无效,因为ms
为static
。您无法从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
的值。有意义吗?