Re: Java + Exception в конструкторе.
От: Blazkowicz Россия  
Дата: 12.05.04 05:26
Оценка: 3 (1) +1
Здравствуйте, fflush, Вы писали:

F>Возник спор не на жизнь, а на смерть, приводит ли к потери памяти вызов эксепшена из конструктора в Java. Деструкторов-то понятно нет, но будет ли память из-под текущего объекта очищена, ведь объект фактически не существовал?

F>Как проверить не знаю, может подскажете?

Конечно будет очищена, кто же такую личинку оставит? Если память была выделена под объект, но при инициализации объекта произошло исключение, то это никак не повлияет на работа GC. Если ссылок на объект не будет — он соберется. Если будут, то не соберется. Откуда утечке-то взяться?

Что значит "объект фактически не существовал". Память выделили? Выделили. Значит объект существовал. Пусть и с не валидными значениями. А перед выделением памяти происходит проверка. Если пямяти не хватает, то объект не будет создаваться.

В чем причина спора? Или 2 программиста на плюсах поспорили про объекты в яве?
Re[2]: Java + Exception в конструкторе.
От: Blazkowicz Россия  
Дата: 12.05.04 05:42
Оценка: 1 (1)
Вот пример, если интересно:
public class MemTest
{
    private static boolean gc = false;

    public MemTest(Object[] store)
    {
        store[0] = this; //Сохраняем ссылку на объект
        throw new RuntimeException(); //Бросаем исключение
    }

    public static void main(String[] args)
    {
        Object[] store = new Object[1]; //Создаём хранилище
        try
        {
            new MemTest(store); //Пытаемся создать объект
        }
        catch(Exception e)
        {
            System.out.println("Exception");//Произошло исключение
            System.out.println("Object: " + store[0]); //Имеем ссылку на объект не null
            //Убиваем ссылку, чтобы объект ыл доступен мусорщику
            store[0] = null;
        }
        //Пока объект не собран
        while(!gc)
        {
            try
            {
                Thread.sleep(200);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();  
            }
            // Пытаемся разбудеить GC
            System.gc();
        }
    }
    //Метод вызывается перед тем как объект будет удален из памяти.
    protected void finalize() throws Throwable
    {
        System.out.println("Collecting...");
        gc = true;
    }
}
Java + Exception в конструкторе.
От: fflush  
Дата: 11.05.04 17:56
Оценка:
Возник спор не на жизнь, а на смерть, приводит ли к потери памяти вызов эксепшена из конструктора в Java. Деструкторов-то понятно нет, но будет ли память из-под текущего объекта очищена, ведь объект фактически не существовал?
Как проверить не знаю, может подскажете?
========
we are not an approved substitute for your brain (from #c++ on irc.gnu.org)
Re: Java + Exception в конструкторе.
От: Аноним  
Дата: 11.05.04 19:24
Оценка:
Здравствуйте, fflush, Вы писали:

F>Возник спор не на жизнь, а на смерть, приводит ли к потери памяти вызов эксепшена из конструктора в Java. Деструкторов-то понятно нет, но будет ли память из-под текущего объекта очищена, ведь объект фактически не существовал?

F>Как проверить не знаю, может подскажете?

Пример кода покажите ?
Re[3]: Java + Exception в конструкторе.
От: fflush  
Дата: 12.05.04 07:27
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Вот пример, если интересно:

Оки. Спасибо. Вопрос разрешился .
========
we are not an approved substitute for your brain (from #c++ on irc.gnu.org)
Re[2]: Java + Exception в конструкторе.
От: A_Gura Россия http://a-gura.livejournal.com
Дата: 12.05.04 08:39
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, fflush, Вы писали:


[...]
B>В чем причина спора? Или 2 программиста на плюсах поспорили про объекты в яве?

Много раз наблюдал подобные споры... В случае с двумя Java-разработчиками обычно обсуждается культурный аспект. Что скажешь по этому поводу как эксперт?
Работать надо над собой...
Re[3]: Java + Exception в конструкторе.
От: Blazkowicz Россия  
Дата: 12.05.04 09:53
Оценка:
Здравствуйте, A_Gura, Вы писали:

A_G>Много раз наблюдал подобные споры... В случае с двумя Java-разработчиками обычно обсуждается культурный аспект. Что скажешь по этому поводу как эксперт?


Не понял вопроса. Чего сказать-то?
Re[4]: Java + Exception в конструкторе.
От: A_Gura Россия http://a-gura.livejournal.com
Дата: 12.05.04 12:31
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Не понял вопроса. Чего сказать-то?


Можно ли (нужно ли) возбуждать исключения в конструкторах?
Работать надо над собой...
Re[5]: Java + Exception в конструкторе.
От: DrDred Россия  
Дата: 12.05.04 12:39
Оценка:
Здравствуйте, A_Gura, Вы писали:

A_G>Здравствуйте, Blazkowicz, Вы писали:


B>>Не понял вопроса. Чего сказать-то?


A_G> Можно ли (нужно ли) возбуждать исключения в конструкторах?

Можно... и нужно... А как еще сообщить клиенту, что объект не может быть сконструирован?
вводить специальный метод для этих целей?
Либо же лепить пустые конструкторы и использовать везде метод типа initalize()...

Тем более, если мы посмотрим на стнадартную библиотеку классов, так это там сплошь и рядом...
... << RSDN@Home 1.1 beta 1 >>
--
WBR, Alexander
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.