Есть такой класс:
public class Game implements Screen {
private World world;
private Renderer renderer;
public Game() {
world = new World();
renderer = new Renderer(world);
}
}
Почему переменные инициализируются внутри конструктора, а не в месте их создания?
Например, можно просто написать:
private World world = new World();
В чем отличие таких способов инициализации?
Ответ
Плюсы использования инициализации переменной в строке с её объявлением:
Если имеется несколько конструкторов, то это позволяет избежать необходимости инициализировать переменную в каждом из конструкторов.
При использовании анонимных классов нет возможности создавать их конструкторы - соответственно, инициализировать final поля класса можно только с помощью инициализации при объявлении и блока инициализации объекта.
Минусы такого использования:
Отсутствует возможность обработки исключений при инициализации.
Отсутствует возможность проведения сколько-либо сложных вычислений (например, использование цикла for) при инициализации. В этом случае придётся воспользоваться конструктором или блоком инициализации объекта.
Комментариев нет:
Отправить комментарий