2013-08-25 3 views
7

В Java, если я хочу использовать метод без создания экземпляра объекта определенного класса, я использую статический импорт.Static Imports and Constructors

Что-то вроде:

import static com.company.SomeClass.*; 

можно затем вызывать методы этого класса в aother класса без создания экземпляра SomeClass.

Как только я использую метод из этого класса, также является конструктором из этого класса?

Например, если я позвоню

SomeClass.doStuff(); 

ли конструктор дозвонились для SomeClass за кулисами?

+0

Вы можете вызвать статические методы таким образом. Вызов статических методов не создает экземпляр класса. –

ответ

3

Создается ли конструктор для SomeClass за кулисами?

Вызов метода не вызывает конструктор. Конструктор вызывается при создании экземпляра класса. Здесь вы не создаете экземпляр SomeClass, а просто получаете доступ к методу static непосредственно по имени класса. Таким образом, нет смысла вызывать конструктор.

Однако, если вы хотите вызвать метод экземпляра, сначала вам понадобится экземпляр класса, содержащего этот метод. Вы можете получить доступ к методу экземпляра только с помощью экземпляра класса. Но в этом случае также вызов метода не вызывает конструктор за сценой.

+0

Получил! Спасибо! – foobar5512

0

static import не имеет никакого отношения к тому, о чем вы говорите. Он просто делает уверен, что с

import static org.junit.Assert.assertEquals

вы можете использовать assertEquals() вместо Assert.assertEquals()

, когда у вас есть следующая подпись:

public class Assert { 
public static bool assertEquals() 
} 

Другого чем: нет, вы не вызывать конструктор при использовании статического метода. Обратитесь к ответу @ Rohit за разъяснение по этому аспекту.

0

Конструкторы называются только в том случае, если new MyClass() или Class.newInstance. В этом случае вы можете написать некоторый статический блок.

+1

Не очень верно. Существуют и другие способы создания экземпляра. Например, 'Class.newInstance', который вызовет конструктор. –

+0

@RohitJain Отвечено обновлено! – fastcodejava