为什么包含 main 方法的类没有实例化,并且在 Java 中仍然可以



我开始编写我的第一个Java程序。

class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }
}

该程序仅使用上述代码即可正常运行。但根据我的OOP知识,class只是一个抽象的概念,直到你创造了一个同类的对象,它才会变得栩栩如生。然后,通过该对象,我们调用类内的方法/函数。

但是在这个特定的示例中,似乎即使没有创建class HelloWorldApp的对象,也会调用main方法

对象是在其他地方创建的吗?如果是这样,代码的那部分如何知道我的class名称HelloWorldApp

这是因为它是static方法,为此它不需要创建实例

JVM将加载HelloWorldApp类并在其上调用静态方法,并且由于它是公共的JVM(外部(可以访问此方法


另请参阅

  • 为什么是Java-main-method-static

java应用程序的起点(并非总是(是这种方法

public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }

当你这样做java className它会去检查类是否有main方法,因为它是静态的,可以在不创建实例的情况下调用它。

如果没有 main 方法或 main 方法

存在但签名不同,它将抛出一条RuntimeException,说明找不到 main 方法。

不要忘记阅读 仔细看看 main 方法。

题外话:

扩展同样的想法,您不需要类的实例来引用其静态方法和字段。

public class MyClass {
  public static int NUMBER = 10;
  public static void String sayHello(){
    return "Hello";
  }
  public void String sayBye(){
    return "Bye";
  }
  public static void main(String[] args){
    System.out.println(NUMBER); // No need for object 
    System.out.println(sayHello()); // No need for object 
    System.out.println(new MyClass().sayBye()); // sayBye is not accessible at class level have to have an object of MyClass to access sayBye
  }
}

如果在其他类中调用相同,则它可能看起来像:

public class MyClassCaller {
   public static void main(String[] args){
    System.out.println(MyClass.NUMBER); // No need for object just refer the class
    System.out.println(MyClass.sayHello()); // No need for object just refer the class
    System.out.println(new MyClass().sayBye()); // sayBye is not accessible at class level have to have an object of MyClass to access sayBye
  }
}

关于静态方法的使用/过度使用的一个很好的讨论

main 方法是静态的,不需要实例

最新更新