1. ホーム
  2. java

[解決済み] Javaです。どのようにメインメソッドから非静的なメソッドを呼び出すには?

2022-01-29 03:39:34

質問

私はJavaを勉強していますが、次の問題があります:私はmainメソッドを次のように宣言しています。

public static void main(String[] args) {

..... }

私のメインメソッドの内部では、なぜなら 静的 他の静的メソッドしか呼び出せない!!! なぜ?

例えば 別のクラスがあります。

 public class ReportHandler {       
     private Connection conn;   
     private PreparedStatement prep;
     public void executeBatchInsert() { ....
 } }

そこで、メインクラスで private ReportHandler rh = new ReportHandler();

しかし、staticでなければどのメソッドも呼び出すことができない。

これはどこで間違っているのでしょうか?

EDIT: すみません、私の質問は、「出発点」から他のクラスを呼び出せるようにアプリを「設計」するにはどうしたらいいかということです。 static void main ).

解決方法は?

ReportHandlerのインスタンスを作成する必要があります。

ReportHandler rh = new ReportHandler(/* constructor args here */);
rh.executeBatchInsert(); // Having fixed name to follow conventions

インスタンスメソッドの重要なポイントは、クラスの特定のインスタンスに特化したものであることです。 作成 インスタンスを作成します。そうすれば、そのインスタンスは正しい接続とプリペアドステートメントにアクセスすることができます。ただ ReportHandler.executeBatchInsert が十分でない場合は コンテキスト .

それを理解することが本当に大事なんです。

  • インスタンスメソッド(およびフィールドなど)は、特定のインスタンスに関連します。
  • 静的なメソッドとフィールドは、型そのものに関係します。 ではなく 特定のインスタンス

この根本的な違いを理解すれば、インスタンスを生成しないとインスタンスメソッドを呼び出せないことも納得がいくのですが......。例えば、次のような問いかけは意味があります: "What is the height of あれ person?"(特定の人物に対して)尋ねることはできますが、"(人物を指定せずに)What is the height of Person?"と尋ねることは意味がありません。

本やチュートリアルからJavaを学んでいると仮定すると、静的メソッドと非静的メソッドなどの例をもっと読み込むべきです - それは 肝心な を理解しないと、いろいろな問題が発生します。