2010-11-22 9 views
2

Kann mir jemand sagen, was die Notwendigkeit besteht, eine Klasse wie folgt zu erklären:Passing Argumente in main-Methode in Java-Klasse

public class Test { 

String k; 
public Test(String a, String b, String c){ 
    k = a + " " + b + " " + c; //do something 

} 

public void run(){ 
    System.out.println(k); 
} 

public static void main(String[] args) { 
    String l = args[0]; 
    String m = args[1]; 
    String n = args[2]; 
    Test obj = new Test(l,m,n); 
    obj.run(); 
} 

} 

Natürlich ist es funktioniert, aber ich habe nicht den Punkt, warum würde man solche verwenden Möglichkeit, etwas zu implementieren. Liegt es daran, dass wir Argumente direkt an die Klassenhauptmethode übergeben müssen, weshalb wir diese Methode verwenden oder gibt es einen anderen Grund?

Was ist der Zweck von public Test(...) mit dem gleichen Klassennamen. Warum ist es so?

+2

Dies wird überhaupt nicht kompiliert 'Test obj = neue Datei (l, m, n);' –

+1

macht keinen Sinn. 'Test obj = neue Datei (l, m, n);' - kompiliert nicht. – dacwe

+0

Richtige Einrückung? ; p 'Test obj = neue Datei (l, m, n);' sollte 'Test obj = neuer Test (l, m, n) sein;' –

Antwort

5

Die public Test(...) ist eine constructor und ihr Zweck ist für die Erstellung von Objekten. Dies wird deutlich aus dem Beispielcode zu sehen ...

Test obj = new Test(l,m,n); 

Die Variable obj instanziiert mit dem Objekt Test durch, um die Test ‚s Konstruktor zugeordnet ist. In Java muss jeder Konstruktor haben die genaue gleichen Namen (und Fall) wie die Java-Datei, in der es geschrieben ist (In Ihrem Fall Konstruktor Test ist in Test.java gefunden).

... Warum ist es so?

Alles hängt davon ab, was Sie mit Ihrem Objekt tun möchten. Sie könnten einen Konstruktor ohne Argumente haben (dh erfordert keine Parameter) und haben Methoden, um Ihre l, setzen m, n, etwa so:

package net; 


public class Test { 

    private String k; 

    /** 
    * 
    */ 
    public Test() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public void set(String a, String b, String c) { 
     k = a + " " + b + " " + c; //do something 
    } 

    public void run() { 
     System.out.println(k); 
    } 

    public static void main(String[] args) { 
     String l = args[0]; 
     String m = args[1]; 
     String n = args[2]; 
     Test obj = new Test(); 
     obj.set(l, m, n); 
     obj.run(); 
    } 
} 

Wie Sie sehen können, ist es genau das gleiche Funktion wie Ihr Beispiel aber mit einem Nullargumentkonstruktor.

Wenn Ihre Klasse überhaupt keinen Konstruktor hat, fügt Java automatisch einen öffentlichen Konstruktor für null Argumente hinzu.

Hoffe, das hilft.

+0

Danke, dein Beispiel sagt alles. – Rizwan

3

Die Methode mit der Bezeichnung Test ist eine sogenannte constructor für die Test Klasse. Der Konstruktor ist die Methode, die aufgerufen wird, wenn Sie etwas wie new Test(...) schreiben.

Bedenken Sie, dass die Methode main eine static-Methode ist, was bedeutet, dass keine Instanz der Klasse Test aufgerufen werden muss. Dies ist bei der Methode run nicht der Fall. run ist eine Instanzmethode, und um sie aufzurufen, benötigen Sie eine Instanz der Test Klasse (die obj in Ihrem Fall).

+0

Dank Klaus, aber ich bin nur gefragt, warum sollte man diesen Ansatz verwenden, wenn eine einfache Klasse, wie unten die Aufgabe erfüllen kann: public class Test { \t \t static String k = ""; \t \t öffentliche statische void run() { \t \t System.out.println (k); } \t \t \t public static void main (String [] args) { \t \t String l = args [0]; \t \t String m = args [1]; \t \t Zeichenfolge n = args [2]; \t \t k = l + m + n; \t \t run(); \t} } – Rizwan

+0

@Rizwan, gibt es viele Möglichkeiten, die gleiche Sache in der Programmierung zu erreichen. Warum jemand es so wählen würde, könnte entweder aus persönlichen Vorlieben sein, weil es die einzige Art ist, die er kennt usw.Für ein Programm wie dieses, das keinen wirklichen Wert hat, glaube ich nicht, dass es wichtig ist zu diskutieren, welcher Ansatz der beste ist. –

0

Die Methode main ist der Einstiegspunkt für das Programm und wird aufgerufen, wenn Sie java Test über die Befehlszeile ausführen.

public Test(String a, String b, String c) ist ein public constructor für die Test Klasse und wird aufgerufen, wenn Sie new Test(l,m,n); Hinweis rufen, dass a im Konstruktor und l in main-Methode auf den gleichen String beziehen ... dies gilt auch für b und m; c und n.

Als Randbemerkung, erwartet, dass diese Klasse drei Werte aus der Befehlszeile übergeben werden, und speichert sie dann in l, m und n

Eine letzte Anmerkung: Wenn Sie eine Methode mit der Signatur public void run() sollte Ihre Klasse wahrscheinlich implementRunnable, so dass es in einem Thread verwendet werden kann.

1

Das öffentliche Bit Test (...) ist der Konstruktor dieser Klasse. Es hat immer den gleichen Namen wie die Klasse. Klassen und Hauptmethoden sind zwei ganz verschiedene Aspekte der Programmierung. Klassen definieren wiederverwendbare Komponenten mit Status und Methoden. Die Hauptmethode ist eine spezielle Methode, die über die Befehlszeile aufgerufen wird.

Ihr Beispiel ist so trivial, dass es keine Vorteile der objektorientierten Programmierung zeigt. Wenn Sie ein Beispiel betrachten, bei dem Sie verschiedene Klassen inter- aktionieren, erhalten Sie möglicherweise ein besseres Gefühl dafür.

0

Lernen Sie Java.

Ein Konstruktor ist eine Funktion, die aufgerufen wird, um ein Objekt zu erstellen, und es wird von einer Funktion mit demselben Namen wie der Klasse angegeben, aber kein Rückgabetyp. Mehrere Konstruktoren können mit unterschiedlichen Argumenten deklariert werden.

In diesem Fall werden die Argumente aus dem Argumentarray genommen und als Argumente an den Konstruktor für Test übergeben.

Dies sind grundlegende Konzepte für die Programmiersprache Java. Sie sollten auf Java nachlesen. Versuchen Sie Thinking in Java, dies ist ein großartiges Buch, um loszulegen.

Verwandte Themen