Здравствуйте, Аноним, Вы писали:
А>"Конструктор гарантирует инициализацию
Это не всегда верно... В общем, как и в С++. Есть шанс, что другой поток получит ссылку на недосторенный объкет.
См. singleton + double-check locking.
А>Конечно, можно создать особый метод, назвать его initialize() и включить во все ваши классы.... " А>[/q] А>А в чем разница с C++ ? И тут и там можно кинуть эксепшен в конструкторе и чтобы хендлить такие вещи нужно оборачивать создание объекта в try-catch блок. Или разница в том, что в случае cpp деструктор вызван не будет (т.к. обьект не создан), а в java будет все таки вызван когда GC решить убить обьект класса?
В java нет декструкторов. Есть finalize которым не надо пользваться. Будет он вызван или нет, завист от того, был ли вызван конструктор самого базового класса, а так как избежать его вызова практически не возможно (попробуйте заставить конструктор Object кинуть исключение), то вероятность его вызова, если он (finalize) реализован, почти 100%.