powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ООП
19 сообщений из 19, страница 1 из 1
ООП
    #34682358
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вопрос больше из области теории. Пишу свой класс, который в конструкторе может выбрасывать исключения. Я так понимаю это не хорошо. Можно сделать простейший конструктор и затем вызывать метод init для объекта в котором производить инициализацию, но это тоже не лучший подход, т.к. после отработки конструктора объект не инициализирован со всеми вытекающими из этого последствиями. Так как быть в данном случае? Поделитесь опытом, пожалуйста.
...
Рейтинг: 0 / 0
ООП
    #34682446
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример нехорошего, как вы сказали, конструктора:
Код: plaintext
 public  FileInputStream(String name)  throws  FileNotFoundException
...
Рейтинг: 0 / 0
ООП
    #34682447
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bemtaillТакой вопрос больше из области теории. Пишу свой класс, который в конструкторе может выбрасывать исключения. Я так понимаю это не хорошо. Можно сделать простейший конструктор и затем вызывать метод init для объекта в котором производить инициализацию, но это тоже не лучший подход, т.к. после отработки конструктора объект не инициализирован со всеми вытекающими из этого последствиями. Так как быть в данном случае? Поделитесь опытом, пожалуйста.
Кто вам сказал?
Если инициализация класса жизненно важна и без него дальнейший запуск не имеет смысла (например, отсутствуют ресурсы, отсутствует доступ к СУБД и т.д.) — вполне можно thrown'ить Exception и вываливаться с предсмертными воплями.

Если вы извне перехватываете исключения, то должны ожидать, что инстанс может быть не инициализировать.
...
Рейтинг: 0 / 0
ООП
    #34682449
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*не инициализирован
...
Рейтинг: 0 / 0
ООП
    #34682452
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :)
...
Рейтинг: 0 / 0
ООП
    #34682472
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :)

Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое.
...
Рейтинг: 0 / 0
ООП
    #34682482
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне пофигу. я против. имхо оочень неудобно.

я за ленивую инициализацию. при отладке гораздо лучше найти и просмотреть объедкт кот при своей инициализации шо-то кинул. и например рискнуть повторить её.

checked тож в топку
...
Рейтинг: 0 / 0
ООП
    #34682567
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bemtaill
Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое.
Это не C++
...
Рейтинг: 0 / 0
ООП
    #34683879
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bemtaill Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :)

Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое.

Вы неправильно помните. В С++ исключение как раз и были введены в том числе как механизм сообщения об ошибках в конструкторах
...
Рейтинг: 0 / 0
ООП
    #34683914
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri bemtaill Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :)

Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое.

Вы неправильно помните. В С++ исключение как раз и были введены в том числе как механизм сообщения об ошибках в конструкторах

В С++ при неосторожном обращении с исключениями в конструкторе можем получить наполовину сформированный объект.
...
Рейтинг: 0 / 0
ООП
    #34683947
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bemtaill
В С++ при неосторожном обращении с исключениями в конструкторе можем получить наполовину сформированный объект.
В Java вы можете быть спокойным. То, что не проинициализировалось, будет зачищено GC.
...
Рейтинг: 0 / 0
ООП
    #34683962
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bemtaill funikovyuri bemtaill Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :)

Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое.

Вы неправильно помните. В С++ исключение как раз и были введены в том числе как механизм сообщения об ошибках в конструкторах

В С++ при неосторожном обращении с исключениями в конструкторе можем получить наполовину сформированный объект.


Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html
...
Рейтинг: 0 / 0
ООП
    #34683981
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri
Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html

Примеры будут если поможете с:
http://www.sql.ru/forum/actualthread.aspx?tid=455468

:) Нет времени сейчас отвлекаться...
...
Рейтинг: 0 / 0
ООП
    #34685939
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bemtaill funikovyuri
Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html

Примеры будут если поможете с:
http://www.sql.ru/forum/actualthread.aspx?tid=455468

:) Нет времени сейчас отвлекаться...
Я имел ввиду, что если конструктор в C++ выбрасывает исключения, то в случае если программер не ловит его при создании объекта получаем наполовину сформированный объект и пытаемся работать с ним как с обычным. Возможно я не много неправильно выразился в начале : "это не хорошо" = "источник лишних возможных проблем". Хотя конечно в Java это не грозит, т.к. всегда исключение поймаем.
...
Рейтинг: 0 / 0
ООП
    #34686141
biomen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интерсно, а будет утечка при вызове конструктора и вызовется ли деструктор?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 class  Foo
{
  char [] * t;
    public  Foo()
   {
     t= new   char [ 10 ];
      throw   1 ;
   }
    public  ~Foo()
   {
     delete t;
   }
}
...
Рейтинг: 0 / 0
ООП
    #34686173
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
biomenИнтерсно, а будет утечка при вызове конструктора и вызовется ли деструктор?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 class  Foo
{
  char [] * t;
    public  Foo()
   {
     t= new   char [ 10 ];
      throw   1 ;
   }
    public  ~Foo()
   {
     delete t;
   }
}


Проверте.
PS: http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page73.html
...
Рейтинг: 0 / 0
ООП
    #34686239
biomen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасиб, но просто нет компилятора. Видимо вызовется:)
...
Рейтинг: 0 / 0
ООП
    #34686816
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bemtaill bemtaill funikovyuri
Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html

Примеры будут если поможете с:
http://www.sql.ru/forum/actualthread.aspx?tid=455468

:) Нет времени сейчас отвлекаться...
Я имел ввиду, что если конструктор в C++ выбрасывает исключения, то в случае если программер не ловит его при создании объекта получаем наполовину сформированный объект и пытаемся работать с ним как с обычным. Возможно я не много неправильно выразился в начале : "это не хорошо" = "источник лишних возможных проблем". Хотя конечно в Java это не грозит, т.к. всегда исключение поймаем.

Не понял, если честно. Еще раз повторяю - отстутствие возможности сообщать об ошибках конструктора - одна из причин по которым исключения вообще появились в С++. Все остальное детали реализации конкретных компиляторов и их соответствие стандарту. Сейчас в большинстве современных компиляторов С++ все нюансы (например с освобождением памяти и вызовом деструктора) уже учтены
...
Рейтинг: 0 / 0
ООП
    #34687040
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда видимо был не прав. Признаю. Спасибо за разъяснения.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ООП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]