无法在main方法中调用方法

我试图用另一种方法(比如在C#中)调用一个方法,如下所示:

public class Exercise1 { Scanner scanner = new Scanner(System.in); public int FirstNumber; public int SecondNumber; public int Answer; public static void main(String [] args) { GetNumbers(); } private void GetNumbers() { System.out.print("Type in the first number: "); FirstNumber = scanner.nextInt(); System.out.print("Type in the second number: "); SecondNumber = scanner.nextInt(); Answer = FirstNumber + SecondNumber; System.out.print("The answer is: " + Answer); } } 

为什么我不能这样调用这个方法?

您无法在static上下文中访问non static方法。

由于main方法是静态的,因此无法访问其中的非static方法。

可能的解决方案:

解决方案1。

制作你的GetNumbers(); static 。 然后你就可以访问它了。

  private static void GetNumbers() { } 

但是,我不会在你的情况下推荐,因为你也在GetNumbers()方法中访问其他instnace mebers。 所以它们也需要是static

解决方案2。

在main方法中为Exercise1类创建对象。

  public static void main(String [] args) { Exercise1 ex= new Exercise1(); ex.GetNumbers(); } private void GetNumbers() { System.out.print("Type in the first number: "); FirstNumber = scanner.nextInt(); System.out.print("Type in the second number: "); SecondNumber = scanner.nextInt(); Answer = FirstNumber + SecondNumber; System.out.print("The answer is: " + Answer); } 

并作为旁注:

请遵循java命名约定 ,变量名称统计信息与小写字母。

  public int firstNumber; public int secondNumber; public int answer; 

GetNumbers(); 需要保持static 。 静态方法只能调用static method或使用static fields

但是,如果Exercise1object实例是main()本地实例,则它可以访问object.GetNumber() main() 。 也就是说,在main()方法中创建Exercise1的实例对象以访问该Exercise1对象的GetNumber()方法。

main是静态方法,而GetNumbers()不是静态的,要么将GetNumbers()设为静态,要么在main中创建一个对象,然后调用GetNumbers()

像这样

 public class Exercise1 { Scanner scanner = new Scanner(System.in); public int FirstNumber; public int SecondNumber; public int Answer; public static void main(String [] args) { Exercise1 e=new Exercise1(); e.GetNumbers(); } private void GetNumbers() { System.out.print("Type in the first number: "); FirstNumber = scanner.nextInt(); System.out.print("Type in the second number: "); SecondNumber = scanner.nextInt(); Answer = FirstNumber + SecondNumber; System.out.print("The answer is: " + Answer); } } 

要么

  public class Exercise1 { static Scanner scanner = new Scanner(System.in); public static int FirstNumber; public static int SecondNumber; public static int Answer; public static void main(String [] args) { GetNumbers(); } private static void GetNumbers() { System.out.print("Type in the first number: "); FirstNumber = scanner.nextInt(); System.out.print("Type in the second number: "); SecondNumber = scanner.nextInt(); Answer = FirstNumber + SecondNumber; System.out.print("The answer is: " + Answer); } }