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と、クラスにメイン メソッドがあるかどうかが確認されます。静的であるため、インスタンスを作成せずに呼び出すことができます。

メイン メソッドがない場合、またはメイン メソッドは存在するが同じ署名がない場合は、RuntimeExceptionメイン メソッドが見つからないことを示すメッセージがスローされます。

メインメソッドの詳細を読むことを忘れないでください。

オフトピック:

同じ考え方を拡張すると、静的メソッドとフィールドを参照するためにクラスのインスタンスは必要ありません。

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

メインメソッドはインスタンスを必要としない静的です

于 2012-05-16T11:40:03.550 に答える