2013-08-25 23 views
7

W Javie, jeśli chcę użyć metody bez tworzenia obiektu instancji określonej klasy, używam statycznych importów.Statyczne importowanie i konstruktory

Coś jak:

import static com.company.SomeClass.*; 

mogę następnie wywołać metody z tej klasy w aother klasy bez tworzenia instancji SomeClass.

Kiedy używam metody z tej klasy, czy konstruktor tej klasy również jest wywoływany?

Na przykład, jeśli zadzwonię

SomeClass.doStuff(); 

Czy konstruktora uzyskać nazywane dla SomeClass za kulisami?

+0

W ten sposób można wywoływać tylko metody statyczne. Wywoływanie metod statycznych nie tworzy instancji klasy. –

Odpowiedz

3

Czy konstruktor jest wywoływany za SomeClass za kulisami?

Wywołanie metody nie wywołuje konstruktora. Konstruktor jest wywoływany podczas tworzenia instancji klasy. Tutaj nie tworzysz instancji SomeClass, ale po prostu korzystasz z metody static bezpośrednio na nazwie klasy. Zatem nie ma sensu wywoływać konstruktora.

Jeśli jednak chcesz wywołać metodę instancji, najpierw potrzebujesz instancji klasy zawierającej tę metodę. Dostęp do metody instancji można uzyskać tylko za pomocą instancji klasy. Ale w tym przypadku również wywołanie metody nie wywołuje konstruktora za sceną.

+0

Gotowy! Dziękuję Ci! – foobar5512

0

static import nie ma nic wspólnego z tym, o czym mówisz. To właśnie gwarantuje, że z

import static org.junit.Assert.assertEquals

można użyć assertEquals() zamiast Assert.assertEquals()

gdy masz następujący podpis:

public class Assert { 
public static bool assertEquals() 
} 

inny niż ten: Nie, nie powoływania konstruktor przy użyciu metody statycznej. Zobacz odpowiedź @ Rohit, aby uzyskać wyjaśnienia na temat tego aspektu.

0

Konstruktory są wywoływane tylko wtedy, gdy wykonuje się new MyClass() lub Class.newInstance. W tym przypadku możesz napisać blok statyczny.

+1

Niezbyt prawdziwe. Istnieją inne sposoby tworzenia instancji. 'Class.newInstance' na przykład, który wywoła konstruktor. –

+0

@RohitJain Odpowiedź zaktualizowana! – fastcodejava