2013-08-25 17 views
7

Wenn ich in Java eine Methode verwenden möchte, ohne ein Instanzobjekt einer bestimmten Klasse zu erstellen, verwende ich statische Importe.Statische Importe und Konstruktoren

Etwas wie:

import static com.company.SomeClass.*; 

Ich kann dann in Aweitere Klasse von dieser Klasse Methoden aufrufen, ohne eine Instanz von Someclass zu schaffen.

Sobald ich eine Methode aus dieser Klasse verwende, wird der Konstruktor aus dieser Klasse auch aufgerufen?

Zum Beispiel, wenn ich rufe

SomeClass.doStuff(); 

Hat den Konstruktor für Someclass hinter den Kulissen aufgerufen?

+0

Sie können nur statische Methoden auf diese Weise aufrufen. Der Aufruf von statischen Methoden erstellt keine Instanz einer Klasse. –

Antwort

3

Wird der Konstruktor für SomeClass hinter den Kulissen aufgerufen?

Das Aufrufen einer Methode ruft Konstruktor nicht auf. Der Konstruktor wird aufgerufen, wenn Sie eine Instanz einer Klasse erstellen. Hier werden Sie nicht die SomeClass instanziieren, sondern einfach auf die static Methode direkt auf den Klassennamen zugreifen. Also wird der Konstruktor nicht aufgerufen.

Wenn Sie jedoch eine Instanzmethode aufrufen möchten, benötigen Sie zuerst eine Instanz der Klasse, die diese Methode enthält. Sie können auf eine Instanzmethode nur mit einer Instanz der Klasse zugreifen. Aber auch in diesem Fall ruft der Aufruf der Methode den Konstruktor nicht hinter der Szene auf.

+0

Verstanden! Danke! – foobar5512

0

static import hat nichts damit zu tun, wovon Sie reden. Es macht einfach sicher, dass mit

import static org.junit.Assert.assertEquals

Sie assertEquals() statt Assert.assertEquals()

verwenden können, wenn Sie die folgende Signatur haben:

public class Assert { 
public static bool assertEquals() 
} 

Anders als das: nein, Sie nicht aufrufen der Konstruktor bei Verwendung einer statischen Methode. Beziehe dich auf die Antwort von @ Rohit, um diesen Aspekt zu klären.

0

Konstruktoren werden nur aufgerufen, wenn man new MyClass() oder Class.newInstance tut. Sie können in diesem Fall einen statischen Block schreiben.

+1

Nicht sehr wahr. Es gibt andere Möglichkeiten, eine Instanz zu erstellen. 'Class.newInstance' zum Beispiel, das den Konstruktor aufrufen wird. –

+0

@RohitJain Antwort aktualisiert! – fastcodejava