7

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

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

只需使用上面的代码,程序就可以正常运行。但是根据我的 OOP 知识,aclass只是一个抽象概念,直到您创建了一个同类对象后才会出现。然后,通过该对象,我们调用类中的方法/函数。

但是在这个特定的示例中,似乎main即使没有创建class HelloWorldApp

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

4

3 回答 3

10

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

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


另见

于 2012-05-16T11:37:55.687 回答
3

java应用程序的起点(不总是)是这个方法

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

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

如果没有主方法或主方法存在但没有相同的签名,它将向您抛出一个RuntimeException未找到的主方法。

不要忘记阅读详细了解 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
  }
}

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

于 2012-05-16T11:39:21.793 回答
1

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

于 2012-05-16T11:40:03.550 回答