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

Java 如何将静态变量的值传递给方法?,java,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[]){ stati

我写了一个简单的程序来演示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!
}
}
我得到的确切错误是“类型statictest的方法square(int)未定义”


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

您的方法也应该是静态的

问题不在于您正在将静态字段(而不是变量)传递到方法中。这是因为您试图在没有实例的情况下调用实例方法

要么:

  • 设为正方形
    静态
    ,这样您就可以从
    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);
        //  ^^^^^^^^^^^^^^^^        ^^^^^^^^^^^^^^^^
        }
    }
    

    此方法必须是静态的

    voidsquare(int-stvar)
    如果要从静态上下文调用它

    另一种更优雅且OOP的方法是声明类的对象,通过声明其成员为私有来封装其成员

    i、 e


    不能直接调用非静态方法。您必须为staticdemo类创建一个对象,然后可以使用OOObject调用该方法。 在主方法中输入 staticdemo st=新的staticdemo();
    圣广场(s)

    JavaScript???使用正确的代码标记标记问题,您将得到一些答案。这不是Javascript。应该是
    staticdemo.square
    而不是
    square
    。我投票决定以低质量问题结束这个问题。@Everv0id:只有当
    square
    static
    @T.J.Crowder right时。欲速则不达。
    public static void main(String args[]){
        staticdemo.stvar = 10;  
        int s = staticdemo.stvar;
        staticdemo foo = new staticdemo();
    
        foo.square(s); //HERE will work fine!
    }