为什么在从main方法调用方法时,我被迫将方法和变量更改为静态?

时间:2017-03-23 18:26:37

标签: java static

出于某种原因,当我尝试使用main方法调用方法或尝试更改在main方法之外声明的变量时,我不得不将所有内容更改为static。这在某些地方很好,但是当需要在代码中稍后更改值时,例如使用Scanner进行输入时,main方法只是将它提升到一个全新的水平,试图让我更改扫描程序库等。

This example shows what happens if I try calling a method.

This example shows what happens when I try alter the value of a variable declared outside my main method.

在编写java代码之前,我从未遇到过这样的问题我尝试重新创建类/项目文件等但没有任何作用。我尝试到处寻找解决方案,但我似乎找不到一个可能是因为我不知道该搜索什么。我可能让自己看起来像一个正确的白痴我的头衔哈哈!有人建议吗?提前谢谢!

超蕸

3 个答案:

答案 0 :(得分:1)

当调用方法形成一个main时,你必须实例化它们所在的类,除非它是一个静态函数

这是因为一个类是一种模板,在实例化之前没有任何东西保存过它

public class TestClass{
    public static void main(String[] args){
        TestClass testClass = new TestClass();
        testClass.method(); 
    }
    public method method(){}
}

在上面的例子中,我实例化了一个TestClass,然后调用了testClass实例

你可能想要静态的类上有一些函数和变量,因为类上的静态在所有实例之间共享,并且可以在类上调用,比如你想知道创建了多少实例然后这样的东西可以做到。

public class TestClass{
    public static void main(String[] args){
        TestClass testClass = new TestClass();
        testClass.method(); 
        System.out.print(TestClass.instances +""); // note that i call on
//the class and not on an instance for this static variable, and that the + "" 
//is to cast the int to a string
    }
    public static int instances = 0; // static shared variable
    public TestClass(){instances++;} // constructor
    public method method(){}
}

答案 1 :(得分:1)

一旦进入main()方法,退出“静态土地”可能会有点混乱。一种简单的方法是让另一个对象包含你的“真实”(非静态)顶级代码,然后你的main方法创建该对象并将其启动。

public static void main() {
    MyEngine engine = new MyEngine();
    // core logic inside of start()
    engine.start();
}

我希望这对你来说已经足够清楚了。祝你好运Maisy!

答案 2 :(得分:0)

你需要做一些面向对象的编程教程并学习一些基础知识。

作为不使用静态调用问题的答案,您必须创建主类

的实例

让我们假设以下类Foo

    public class Foo{
          private int myVarInteger;
          public int getMyVarInteger(){ return this.myVarInteger;}
          public void setMyVarInteger(int value){this.myVarInteger = value;}

          public static void main(String[] args){
                  Foo myClassInstanceObject = new Foo();
                  // now we can access the methods
                  myClassInstanceObject.setMyVarInteger(5);
                  System.out.println("value ="+myClassInstance.getMyVarInteger()); 
          }

    }