2015-12-17 2 views
-8

Я видел два способа инициализации класса в Java:Инициирование экземпляра класса в Java

Class name = new Class(); 

или

Class name; 
name = new Class(); 

В чем разница между ними? это предпочтение или есть реальное различие в том, как они будут работать?

+0

Это то же самое. –

+1

Нет разницы ..... – Abdelhak

+1

Зачем им быть иначе? –

ответ

3

Не совсем. Могут быть случаи, когда вторая нужна, потому что конструктор генерирует исключение. Если вам нужно использовать имя за пределами блока try/catch, вам нужно его создать в первую очередь.

Class name; 

try { 
    name = new Class(); 
} catch (Exception e) { 
    do something 
} 

В противном случае первый более эффективен.

+1

P.S. Если ваш конструктор создает исключение, вы, вероятно, должны его переписать! – TangledUpInBlue

1

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

2

Сначала: оба фрагмента кода будут делать то же самое. Первый фрагмент кода - это краткая форма первой.

Второй способ может быть использован в некоторых случаях:

  1. Ваш конструктор бросает любые исключения.

    В этом случае вы бы что-то вроде этого:

    Class name; 
    try 
    { 
        name = new Class(); 
    } 
    catch (Exception exp) 
    { 
        exp.printStackTrace(); 
    } 
    
  2. Вы хотите инициализировать переменную различными способами

    Class name; 
    if(//check something) 
    { 
        name = new Class("example1"); 
    } 
    else 
    { 
        name = new Class("example1"); 
    } 
    

PS: Просто некоторые примеры, где это полезно , Есть много других способов использования этого.

1

Наименование класса; -> Декларация name = new Class(); -> Instanciation

Память зарезервирована для объекта «name» с помощью instanciation. Таким образом, память не сохраняется до тех пор, пока вы не будете использовать «новое» ключевое слово.

Вы также можете проверить сгенерированный байт-код, вы обнаружите, что JVM выполняет оптимизацию и предоставит тот же результат для ваших двух фрагментов кода.

Смежные вопросы