Java: Wie man nicht statische Methode von Hauptmethode aufruft?

Ich lerne Java und jetzt habe ich folgendes Problem: Ich habe die Hauptmethode als deklariert

public static void main(String[] args) { ..... } 

Innerhalb meiner Hauptmethode, weil es statisch ist, kann ich NUR andere statische Methode nennen !!! Warum ?

Zum Beispiel: Ich habe eine andere class

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

Also deklariere ich in meiner Hauptklasse einen private ReportHandler rh = new ReportHandler();

Aber ich kann keine Methode aufrufen, wenn sie nicht statisch ist.

Wo geht das schief?

EDIT: Entschuldigung, meine Frage ist: Wie kann ich die App so gestalten, dass ich andere classn von meinem “Startpunkt” aus aufrufen kann (die static void main ) static void main

Solutions Collecting From Web of "Java: Wie man nicht statische Methode von Hauptmethode aufruft?"

Sie müssen lediglich eine Instanz von ReportHandler erstellen:

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

Der wichtige Punkt von Instanzmethoden ist, dass sie spezifisch für eine bestimmte Instanz der class sein sollen. Sie müssen also zuerst eine Instanz erstellen . Auf diese Weise hat die Instanz in Ihrem Fall Zugriff auf die richtige Verbindung und die vorbereitete statement. ReportHandler.executeBatchInsert aufrufen, ist nicht genügend Kontext vorhanden .

Es ist wirklich wichtig, dass du das verstehst:

  • Instanzmethoden (und Felder usw.) beziehen sich auf eine bestimmte Instanz
  • Statische Methoden und Felder beziehen sich auf den Typ selbst, nicht auf eine bestimmte Instanz

Sobald Sie diesen fundamentalen Unterschied verstehen, ist es sinnvoll, dass Sie keine Instanzmethode aufrufen können, ohne eine Instanz zu erstellen … Zum Beispiel macht es Sinn zu fragen: “Was ist die Höhe dieser Person?” (für eine bestimmte Person), aber es macht keinen Sinn zu fragen: “Was ist die Höhe der Person?” (ohne Angabe einer Person).

Angenommen, Sie lehnen Java von einem Buch oder Tutorial ab, sollten Sie sich mehr Beispiele für statische und nicht-statische Methoden usw. aneignen – es ist ein wichtiger Unterschied zu verstehen, und Sie werden alle möglichen Probleme haben, bis Sie sie verstanden haben .

Bitte finden Sie die Antwort:

 public class Customer { public static void main(String[] args) { Customer customer=new Customer(); customer.business(); } public void business(){ System.out.println("Hi Harry"); } } 

Java ist eine Art objektorientierte Programmierung, keine Prozedurprogrammierung. Also sollte jedes Ding in Ihrem Code ein Objekt manipulieren.

public static void main ist nur der Eintrag Ihres Programms. Es beinhaltet kein Objekt.

Was ist also mit einem Objekt zu kodieren? Es ist einfach, Sie müssen ein bestimmtes Objekt / eine bestimmte Instanz erstellen, ihre Methoden aufrufen, um ihre Zustände zu ändern, oder andere spezifische functionen in diesem Objekt ausführen.

zB einfach so

 private ReportHandler rh = new ReportHandler(); rh. 

Wenn Sie also eine statische Methode deklarieren, wird sie nicht mit Ihrem Objekt / Ihrer Instanz verknüpft. Und es wird auch mit deiner OO-Programmierung verletzt.

Die statische Methode wird normalerweise aufgerufen, wenn diese function nicht mit einem dahinterliegenden Objekt verknüpft ist.

Sie können eine nicht statische Methode nicht aus einer statischen Methode aufrufen, da die Definition von “nicht statisch” etwas bedeutet, das einer Instanz der class zugeordnet ist. Sie haben keine Instanz der class in einem statischen Kontext.

Eine statische Methode bedeutet, dass Sie die Methode für eine Instanz nicht aufrufen müssen. Eine nicht statische Methode (Instanz) erfordert, dass Sie sie für eine Instanz aufrufen. Denken Sie darüber nach: Wenn ich eine Methode habe, die changeThisItemToTheColorBlue() ändert, und ich versuche, sie von der Hauptmethode aus auszuführen, welche Instanz würde sie ändern? Es weiß nicht. Sie können eine Instanzmethode für eine Instanz wie someItem.changeThisItemToTheColorBlue() .

Weitere Informationen finden Sie unter http://en.wikipedia.org/wiki/Method_(computer_programming)#Static_methods .

Sie können sich eine statische Elementfunktion als eine function vorstellen, die existiert, ohne dass ein Objekt existieren muss. Zum Beispiel ist die Integer.parseInt () -Methode von der Integer-class statisch. Wenn Sie es verwenden müssen, müssen Sie kein neues Integer-Objekt erstellen, sondern es einfach aufrufen. Das gleiche gilt für main (). Wenn Sie ein nicht-statisches Mitglied von ihm aufrufen müssen, fügen Sie einfach Ihren Hauptcode in eine class ein und erstellen Sie dann von main ein neues Objekt Ihrer neu erstellten class.

Sie können eine nicht statische Methode nicht ohne Instanzerstellung aus dem main aufrufen, während Sie einfach eine statische Methode aufrufen können. Die Hauptlogik dahinter ist, dass jedes Mal, wenn Sie eine .class-Datei ausführen, alle statischen Daten im RAM gespeichert werden und JVM (Java Virtual Machine) jedoch einen Kontext der erwähnten class erstellen würde, der alle statischen Daten der class enthält . Daher ist es einfach, auf die statischen Daten der class ohne Instanzerstellung zuzugreifen. Das Objekt enthält die nicht statischen Daten. Der Kontext wird nur einmal erstellt, während das Objekt beliebig oft erstellt werden kann. Kontext enthält Methoden, Variablen usw. Während Objekt nur Daten enthält. Somit kann das Objekt auf statische und nicht statische Daten aus dem Kontext der class zugreifen

Da Sie eine nicht statische Methode von main aufrufen möchten, müssen Sie nur ein Objekt dieser class erstellen, das aus einer nicht statischen Methode besteht, und dann können Sie die Methode mit objectname.methodname (); Aber wenn Sie die Methode als statisch schreiben, müssen Sie kein Objekt erstellen und können die Methode mit methodname () aufrufen; von der Hauptleitung. Und dies wird effizienter sein, da es weniger Speicher benötigt als das Objekt, das ohne statische Methode erstellt wurde.