我写了一个简单的程序来演示static关键字的使用。我还输入了一个方法来计算变量的平方,并初始化了主类中静态变量的值。
class staticdemo{
public static int stvar;
void square(int stvar){
System.out.println("" + stvar*stvar);
}
}
public class statictest {
public static void main(String args[]){
staticdemo.stvar = 10;
int s = staticdemo.stvar;
square(s); //HERE IS WHERE I GET THE ERROR!
}
}
我得到的确切错误是“方法square(int)未定义类型statictest”
如何使用静态变量执行该方法?
答案 0 :(得分:0)
你的方法也应该是静态的
答案 1 :(得分:0)
问题不在于您将静态字段(非变量)传递给方法。您在没有实例的情况下尝试调用实例方法。
或者:
同时设置square
static
,以便您可以从main
或
在main
中创建一个实例,以便将其调用:
new staticdemo().square(staticdemo.stvar);
我还强烈建议您不要对静态字段(stvar
)和函数参数(stvar
中的square
)使用相同的名称。它只是要求混乱和麻烦。
还建议遵循标准的Java命名约定,即使是在您自己的测试代码中,但特别是在向其他人寻求帮助时。
所以也许:
class StaticDemo {
public static int stvar;
public static void square(int s) {
// ^^^^^^ ^
System.out.println("" + s * s);
// ^ ^
}
}
public class StaticTest {
public static void main(String args[]) {
StaticDemo.square(StaticDemo.stvar);
// ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
}
}
或者替代:
class StaticDemo {
public static int stvar;
public void square(int s) {
// ^
System.out.println("" + s * s);
// ^ ^
}
}
public class StaticTest {
public static void main(String args[]) {
new StaticDemo().square(StaticDemo.stvar);
// ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
}
}
答案 2 :(得分:0)
此方法必须是静态的
void square(int stvar)
如果你想从静态上下文中调用它
另一种更优雅的 OOP 方式是声明类的对象,通过将其声明为私有来封装其成员
即
public static void main(String args[]){
staticdemo.stvar = 10;
int s = staticdemo.stvar;
staticdemo foo = new staticdemo();
foo.square(s); //HERE will work fine!
}
答案 3 :(得分:0)
您无法直接调用非静态方法。您必须为staticdemo类创建一个对象,然后您可以使用oobject调用该方法。 在主方法里面输入 staticdemo st = new staticdemo(); st.square(一个或多个);