主类中的每个方法都必须是静态的吗?

我是java的总菜鸟但是今晚练习时我发现使用OOP设计主类中的每个方法都必须是静态的吗? 在这段代码中,我无法在类中调用非静态的方法。 似乎我可能忽略了为什么你要声明一个静态的类。 谢谢你的帮助!

public class JavaApplication2 { private static CreateCar Vroom; private static Limo Fuuu; public static void main(String[] args) { Vroom = new CreateCar(); Vroom.creator(); getGas(); addGas(); getGas(); Fuuu = new Limo(); Fuuu.creator(); Fuuu.wheels = 5; Fuuu.wheelie(); } public static int getGas(){ Vroom.returnGas(); return 0; } public static void addGas(){ Vroom.fillerUp(); } } 

您可以调用非静态方法,但只能通过对象执行此操作。 也就是说,您需要在给定对象上调用该方法。

您的主类也可以实例化,因此主类中的每个方法都不需要是静态的。 例如:

 public class MainClass { int value; public void printValue() { System.out.println("" + value); } public static void main(String[] args){ MainClass o = new MainClass(); o.printValue(); } } 

不,但main方法必须是static

要在类中调用非静态方法,必须创建对该 对象引用 。 然后从引用中调用该方法。

 public class JavaApplication2 { // non-static method public void go() { System.out.println("hello"); } public static void main(String[] args) { // declare a reference JavaApplication2 app; // create an object app = new JavaApplication2(); // call a method app.go(); } } 

简短回答:是的。

原因是你的JVM需要独立于已经拥有该类的任何现有实例而调用你的类“主”。

次要语义挑剔:“main”是类的成员(静态成员); 它不是class级本身的名称。

有用的提示:每个类都可以拥有自己的不同的 “main()”。 这对单个测试单个类非常有用。

这有时会让C / C ++程序员感到震惊,其中“main()”与“.exe”相关联,而你只能拥有其中一个 。 在java中,您可以拥有许多“main()”方法,并调用您在运行时选择的任何方法。

呃,你没有“静态主”类。 您在JavaApplication2类中有一个名为main的静态方法。

在该类中不需要任何其他静态方法。 要使用该类,您需要实例化它:

 public static void main(String[] args) { JavaApplication2 myApp = new JavaApplication2(); myApp.someMethod(); ... } 

main是一个专门命名的静态方法,充当入口点。 当你告诉Java从命令行“运行”你的程序时:

java JavaApplication2

JVM调用JavaApplication2.main()传递命令行参数。

简答:不,每种方法都不需要是静态的。

事实上:

  1. 对于小练习,最好不要为主要方法设置不同的课程。
  2. 你可以有多个主类方法的类(在许多库中很常见,用于测试或演示类的使用)
  3. 当你调用java程序(通常是一个jar文件)时,你可以选择要调用哪个类的主要方法
  4. 作为一个初学者尝试避免静态方法,除非你确定你需要它们。 这是因为不善于面向对象编程的人可以通过使用静态方法轻易地滥用静态方法来进行面向函数的编程(不要与函数式编程混淆)。
  5. 一个主方法(注意,我不是说“主”方法)必须是静态的: public static void main (String [] argv) { /* ... */ }

静态方法意味着您可以直接调用它

 public class ClassName{ //no-op public static void method(){//....} } ClassName.method(); 

并且,在某些情况下,可以省略ClassName例如。

 static import main method 

但是要调用非静态方法,必须先启动它。

方法声明为static,以便通过类名引用…例如

 Math.pow(x,y) // x^y 

在这个方法中,用户不必担心实例创建……因为Math的所有方法都是静态的,所以这就是使用静态方法的基本原因….

静态方法可以通过类的对象调用非静态方法

 ClassName cn =new ClassNam().methodName; 

main()是特殊的方法,它是程序执行的起点,所以你永远不会有一个没有运行程序的对象,因而它的调用就像(execution :: java ClassName),所以它必须是静态的…