Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2

Как правильно сделать рефакторинг Exceptions

16.07.2014, 12:20. Показов 1177. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, как правильно сделать рефакторинг Exceptions. Например вынести в отдельный метод и тп. На разных сайтах все пишут по-разному. Направьте в нужное русло ссылочкой на stackoverflow или еще какой ответ.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.07.2014, 12:20
Ответы с готовыми решениями:

[Exceptions] Как правильно внедрить новое исключение в существующее API?
Есть API, которое я не могу менять. Там есть код, в котором в catch блоке возвращают null. Я прочитал что это плохой дизайн т.к форсит...

Как сделать рефакторинг
как сделать рефакторинг? помогите пожалуйста, очень прошу Customer.cs using System; using System.Collections.Generic; using...

Рефакторинг контроллера. Как сделать по красоте?
В методах контроллера формирую строку возвращаемого представления следующим образом: ... return CVar.MAPPING_REDIRECT_WEB +...

15
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
16.07.2014, 12:46
Не понятно, что именно вы хотите сделать, можете привести пример?
Рефакторить exceptions нужно также как и другие классы.
0
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
16.07.2014, 12:53  [ТС]
Например есть такой код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        try {
        //...
        
        } catch (FileNotFoundException e) {
            //...
 
        } catch (IOException e) {
        //...
        
        } finally {
            try {
                } catch (NullPointerException e) {
                    //...
 
                } catch (IOException e) {
                    //...
                
                }
        }
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
16.07.2014, 13:07
1ds, как минимум
Java
1
2
3
4
5
6
finally {
            try {
                } catch (NullPointerException e) {
                    //...
 
                }
заменить на
Java
1
2
3
finally {
    if (... != null){
    }
0
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
17.07.2014, 16:27  [ТС]
Ребята, а объясните, как вообще отлавливаются эксцепшены... если я провожу к примеру чтение/запись из файла, мне каждый метод/объект который эксцепшен бросает надо трукэтчами оборачивать? или можно несколько методов в один блок соединить?
0
 Аватар для IVIakCollideR
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
17.07.2014, 16:37
можешь все отлавливать которые знаешь, а можешь отлавливать общий ексепшн или общий для конкретной группы ексепшнов, но по правильному, сначала отлавливаешь ексепшины более низко стоящие в иерархие ексепшнов а потом более высокие что бы перестраховаться - вдруг что то забыл
1
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
17.07.2014, 16:43  [ТС]
А можешь показать правильный вариант, как должен выгядеть exception. Вот например, как такой грамоздкий ексцепш сократить, это создание файла и закрытие.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
try {
        //...
        
        } catch (FileNotFoundException e) {
            //...
 
        } catch (IOException e) {
        //...
        
        } finally {
            try {
                } catch (NullPointerException e) {
                    //...
 
                } catch (IOException e) {
                    //...
                
                }
        }
0
 Аватар для IVIakCollideR
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
17.07.2014, 17:07
Ну какой то такой псевдокод, хотя не факт что меня не забросают камнями опытные гуру, для jvm это не самый эффективный способ (указывать базовый эксепшн - затрата в поиске "того самого" (к примеру) IOException, хотя в большинстве книг которые я "листал" именно так и пишут)
Java
1
2
3
4
5
6
7
try {
    stream.open();  
    }catch (Exception e) {
        println("stream error");
        } finally {
            stream.closed();
            }
1
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
17.07.2014, 17:13  [ТС]
А stream.out примерно так должен выглядеть тогда да?

Java
1
2
3
public void createFileSet() throws FileNotFoundException, IOException {{
        FileWriter fw = ... ;
    }
0
 Аватар для IVIakCollideR
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
17.07.2014, 17:46
если вы обработали ексепшн так как я вам показал, то обявлять метод как "выбрасываемый исключения" ненужно, это делается для того (пример):
если вы не обработали исключение потому что не знаете как, и хотите что бы разработчик который будет в дальнейшем работать непосредственно с вашим методом обрабатывал это исключение так, как ему хочется, - то вы обявляете в его сигнатуре список возможных исключений, тем самым говорите jvm: "я не хочу обрабатывать эти исключения, поэтому передай их дальше".

А у вас они обработаны и это имеет вид примерно такой:

Java
1
2
3
4
5
6
7
8
9
10
11
public void createFileSet(){
FileWriter fw;
try {
    fw = new FileWriter();
    fw.open(); //или fw.write(); (в общем то, что вы хотели сделать с потоком)
    }catch (Exception e) {
        println("stream error");
        } finally {
            fw.closed(); //закрываем поток
            }
    }
0
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
17.07.2014, 18:07  [ТС]
А такой вариант кода имеет место быть? На сколько плох мой будет рефакторинг, если я сделаю так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public void createFileWriter() throws FileNotFoundException, IOException {
        // Создается файл
    }
 
    public void createFile(){
        try {
            createFileWriter();
        } catch (FileNotFoundException e) {
            System.err.println("Файл не найден:" + e.getMessage());
        } catch (IOException e) {
            System.err.println("Файл не создан:" + e.getMessage());
        }
    }
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
17.07.2014, 20:49
1ds, Хороший вариант
1
 Аватар для IVIakCollideR
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
17.07.2014, 21:25
1ds , да об этом я и говорил, неплохой вариант, только вы должны учитывать то, каким образом будет создаваться ваш файл, если это работа с классом File, что в большинстве случаев считается наиболее удобным способом создания путей и тд, то это не единственные исключения которые может выбросить класс файл.
я бы добавил третий кетч-блок с обработкой базового исключения:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void createFileWriter() throws FileNotFoundException, IOException {
        // Создается файл
    }
 
    public void createFile(){
        try {
            createFileWriter();
        } catch (FileNotFoundException e) {
            System.err.println("Файл не найден:" + e.getMessage());
        } catch (IOException e) {
            System.err.println("Файл не создан:" + e.getMessage());
        } catch (Exception e) {
            System.err.println("Иное исключение:" + e.getMessage());
        }
    }
1
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
17.07.2014, 23:01
IVIakCollideR, Нет, так лучше не делать. Ловить базовые исключения - это всегда плохо.
0
 Аватар для IVIakCollideR
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
18.07.2014, 01:49
Цитата Сообщение от turbanoff Посмотреть сообщение
Нет, так лучше не делать. Ловить базовые исключения - это всегда плохо.
те все книги которые я когда то читал говорили иное, сначала ловим явные исключения, потом базовые, поскольку IOE - прямой наследник Excepton, то логично включить его обработку, на производительности большинства SE приложений это некоим образом не скажется, грубо говоря. Другое дело без него - словить непонятный er-листинг в процессе работы.
Видимо Брюс Эккель не так опытен как вы turbanoff, писал это для себя, и по вашей логике - из потолка, как знать таваищи, как знать...
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.07.2014, 02:36
Цитата Сообщение от turbanoff Посмотреть сообщение
Ловить базовые исключения - это всегда плохо.
Очкень зависит от аппликации. В web ловить и обрабатывать надо все исключения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2014, 02:36
Помогаю со студенческими работами здесь

Сделать рефакторинг кода
Здравствуйте. Помогите сделать рефакторинг кода: <?php $dest = $_POST; $result = $_POST; $output = ""; if ($dest...

Сделать рефакторинг для программы
Нужно сделать рефакторинг для этой программы package laba1; import java.awt.Color; import java.awt.event.ActionEvent; import...

Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для дублирования
Я только начал изучать actionscript и прошу мне помочь. Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для...

Как сделать,у меня сервер обычная XP,как мне правильно сделать так,что бы некоторые компы отрезать от инета,но не от базы данных(К+ и 1С и т.п)
Система токая,инет идет на модем,с модема идет на хаб,с хаба на всех??? какой прогой лучше воспльзываться?? если есть возможнасть то...

Как отлавливать exceptions от stl?
Использую вектор, в описнии написано Return value f a reallocation happens, the storage is allocated using the container's...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru