如何将静态变量的值传递给方法?

时间:2016-04-16 11:23:00

标签: java

我写了一个简单的程序来演示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”

如何使用静态变量执行该方法?

4 个答案:

答案 0 :(得分:0)

你的方法也应该是静态的

答案 1 :(得分:0)

问题不在于您将静态字段(非变量)传递给方法。您在没有实例的情况下尝试调用实例方法。

或者:

  1. 同时设置square static,以便您可以从main

  2. 拨打电话
  3. main中创建一个实例,以便将其调用:

    new staticdemo().square(staticdemo.stvar);
    
  4. 我还强烈建议您不要对静态字段(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(一个或多个);