С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205

И вновь обработка исключений

27.07.2018, 10:50. Показов 834. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, есть уточнения по исключениям.
Написал себе просто тестовую вещь:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class TestExeption {
    static void method1() throws IOException {
        int i=-5;
        System.out.println("Шарик!");
        if (i<0) throw new IOException();
    }
    
    static void method2() throws IOException {
        System.out.println("Шааааааарик!");
        method1();
    }
    
    static void method3(){
        try {
            method2();
        }
        catch (IOException err) {
            System.out.println("Шарик, ты - балбес! "+err);
        }
    }
}
Соответственно вопросы следующие:
1. У меня описаны все варианты работы с исключениями? (я знаю. что есть еще finally, и можно генерировать исключения из кетча. но по этому поводу отдельное уточнение будет. в любом случае это частности.) Т.е. 3 варианта. А). Мы сами ручками генерируем исключение и бросаем его выше. Б). в методе который вызывается (ну или как у матрешки, у несколько методов в глубь), автор метода сгенерировал исключение и мы пробрасываем его выше, чтобы метод вызывающий метод его обработал. В). Мы сами обрабатываем исключение и что-то там делаем, на этом цепочка заканчивается.
2. Правильно ли я понимаю, что в глубине любого метода, если есть вероятность, что там появится исключение, значит в конечной точке вложенности будет throw?
3. Какое именно исключение бросается зависит исключительно от адекватности автора? Ну как в моем случае, я бросаю иоэксепшн, не смотря на то, что моя ошибка не имеет никакого отношения к вводу-выводу.

Извините, если непонятно написал. )))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2018, 10:50
Ответы с готовыми решениями:

Обработка исключений
Здравствуйте! Имеется такой код. // Демонстрация обработки исключений class ExcDemol { public static void main(String args(){ int...

Обработка исключений
Написать программу, решающую данную задачу:Велосипедист, имея начальную скорость X м/с, спускается с горы с ускорением Y м/с2 в течение t...

Обработка исключений
Выполняю следующее задание из книги Б.Эккеля &quot;Thinking in Java&quot; Создайте ваш собственный класс исключения, используя ключевое слово...

13
75 / 61 / 29
Регистрация: 20.04.2015
Сообщений: 415
27.07.2018, 10:55
Ты в коде можешь создать исключение throws new. Типо так и задумано а потом можешь его отлавливать и как то обработать например если метод выдал исключение то мы запустим другой метод
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
27.07.2018, 11:06  [ТС]
Цитата Сообщение от WinniPuh Посмотреть сообщение
Ты в коде можешь создать исключение throws new. Типо так и задумано а потом можешь его отлавливать и как то обработать например если метод выдал исключение то мы запустим другой метод
Не очень понял, можно расшифровать?

И еще - throws new? Разве throws это не просто уведомление, что метод может выбросить какое-то исключение?
0
75 / 61 / 29
Регистрация: 20.04.2015
Сообщений: 415
27.07.2018, 11:52
к примеру есть у тебя какой то класс в котором есть метод который по результатам проверки условий может выдать исключение
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
 
public class Classforum {
    private int[] k = new int[]{1};
    private String command = "8";
    private InputMenu inputMenu = new InputMenu();
 
 
    public void isklOne() {
        try {
            inputMenu.inputCommand(command, k);
        } catch (Exception e) {
            System.out.println("Здесь можно запустить какой то метод мы сделали проверяемое исключение");
        }
    }
 
    public int isklTwo() {
        int rsl = 0;
        try {
            rsl = inputMenu.inputCommand(command, k);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rsl;
    }
 
    public static void main(String[] args) {
        Classforum classforum = new Classforum();
        classforum.isklOne();
        classforum.isklTwo();
        System.out.println("программа выбрасывает исключения но продолжает работу");
 
    }
 
    private static class InputMenu {
 
        public int inputCommand(String command, int[] range) {
            int key = Integer.valueOf(command);
            boolean exit = false;
            for (int value : range) {
                if (value == key) {
                    exit = true;
                    break;
                }
            }
            if (exit) {
                return key;
            } else {
                throw new UnsupportedOperationException("Пункта меню не существует");
            }
        }
 
 
    }
 
    private static class MenuOutException extends RuntimeException {
        public MenuOutException(String msg) {
            super(msg);
        }
    }
}

Java
1
2
3
4
5
if (exit) {
                return key;
            } else {
                throw new UnsupportedOperationException("Пункта меню не существует");
            }
т.е. в этом методе может вылететь ошибка, соответственно можно создать отдельный метод для обработки этого исключения или как-то его отлавливать
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
27.07.2018, 12:08
alexjun, может поможет https://o7planning.org/ru/1018... g-tutorial
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
27.07.2018, 13:43  [ТС]
Цитата Сообщение от WinniPuh Посмотреть сообщение
т.е. в этом методе может вылететь ошибка, соответственно можно создать отдельный метод для обработки этого исключения или как-то его отлавливать
Так то же самое у меня в method1(). Это я понимаю. бросаем исключение сами. Нижний уровень так сказать.

Цитата Сообщение от Aviz__ Посмотреть сообщение
К сожалению на мои вопросы статья не ответила. Практически все это я знал. А вот новых вопросов добавило...
Если я хочу проверить runtimeexeption, где мне взять как называются все возможные классы? Как узнать какую ошибку он предположительно может выбросить?

Ну и соответственно, мои три вопроса так и остались вопросами
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
27.07.2018, 14:08
Цитата Сообщение от alexjun Посмотреть сообщение
где мне взять как называются все возможные классы? Как узнать какую ошибку он предположительно может выбросить?
в документации/в сорцах
Цитата Сообщение от alexjun Посмотреть сообщение
Ну и соответственно, мои три вопроса так и остались вопросами
1. какой-то мутный вопрос, непонятно, что ты хочешь
Цитата Сообщение от alexjun Посмотреть сообщение
значит в конечной точке вложенности будет throw
выполни
String s=null;
s.length()
3. От чего еще может зависеть? см. 1
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
27.07.2018, 14:09
Цитата Сообщение от alexjun Посмотреть сообщение
где мне взять
в документации, на сайте оракла. и каждый класс если он выкидывает исключения, они описываются))
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
27.07.2018, 14:46  [ТС]
Цитата Сообщение от Aviz__ Посмотреть сообщение
и каждый класс если он выкидывает исключения, они описываются))
это понятно. нетбинс скажет. а там найдем.
но про рантаймовские то не предупредит ((((

Цитата Сообщение от xoraxax Посмотреть сообщение
выполни
String s=null;
s.length()
Это рантайм. Про них понятно. Они генерируются самим языком, на сколько я понял. Речь идет именно про проверяемые.
Например:
Java
1
2
3
void met1(){
 MyClass.met2();
}
Компилятор говорит: "met2 может бросить IOExeption. либо добавь throws IOExeption к met1() либо создай try-catch"
Это значит, что в met2(), либо в каком-то методе, который он вызывает существует "...throw IOExeption;" ?
Больше IOExeption никак появиться не может?
ArithmeticException, например, появляется сам. Если с математикой косячить. Но, повторюсь, это рантайм.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
27.07.2018, 15:10
Цитата Сообщение от alexjun Посмотреть сообщение
Компилятор говорит: "met2 может бросить IOExeption. либо добавь throws IOExeption к met1() либо создай try-catch"
Это значит, что в met2(), либо в каком-то методе, который он вызывает существует "...throw IOExeption;" ?
не в каком то методе, а сам метод мет бросает исключение, какие там он внутри методы вызывает тебя не должно волновать, если компилятор ругается на исключение, то его бросает сам метод
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
27.07.2018, 15:23  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
не в каком то методе, а сам метод мет бросает исключение, какие там он внутри методы вызывает тебя не должно волновать, если компилятор ругается на исключение, то его бросает сам метод
но он может бросить его с помощью throw или перебросить с помощью throws из метода, который он использует. Правильно?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
27.07.2018, 15:37
Цитата Сообщение от alexjun Посмотреть сообщение
но он может бросить его с помощью throw или перебросить с помощью throws из метода, который он использует. Правильно?
нет, компилятор ругнется, только если есть throws в сигнатуре метода, о том, что там бросается внутри его тела тебя не уведомят

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class ExExample {
    
    public void exceptionInMethodSignature() throws IOException {
        File f = new File("test");
        f.createNewFile();
    }
 
    public void exceptionInMethod(){ 
        File f = new File("test");
        throw new IllegalArgumentException("test");   
    }
 
    public static void main(String[] args) {
        ExExample e= new ExExample();
        e.exceptionInMethod(); // ОК
        e.exceptionInMethodSignature(); // ошибка, компилятор требует обработать
    }        
}
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,761
27.07.2018, 18:44
Цитата Сообщение от alexjun Посмотреть сообщение
Они генерируются самим языком
Нет. Они генерируются кем угодно.
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
27.07.2018, 23:36
Цитата Сообщение от alexjun Посмотреть сообщение
хочу проверить runtimeexeption, где мне взять как называются все возможные классы
Зачем знать названия всех возможных классов? Хотите ловить все runtime exception так и указывайте это в блоке catch
Java
1
2
3
4
5
try {
  //...
} catch (RuntimeException e) {
  //словит RuntimeException и всех наследников
}

Цитата Сообщение от Welemir1 Посмотреть сообщение
компилятор ругнется, только если есть throws в сигнатуре метода
Компилятор ругнется только если в throws указано checked exception. В таком случае его необходимо обработать (словить в try...catch) или бробросить далее. Такой пример у компилятора вопросов не вызовет:
Java
1
2
3
4
5
6
7
public static void main(String[] args) {
   foo();
}
 
public static void bar() throws RuntimeException {
   throw new RuntimeException();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2018, 23:36
Помогаю со студенческими работами здесь

Обработка исключений
можете помочь сделать свое исключение в этом коде, пожалуйста!) public static void main(String args) throws IOException { ...

Обработка исключений
Доброго времени суток, помогите пожалуйста,вот задача: Скопировать файл, в другой файл. После копирования размер файла должны совпадать. ...

Обработка исключений
Есть метод public void setLenght(double lenght) { this.lenght = lenght; }Понятно, что если длина будет принимать...

Обработка исключений
Доброго времени суток. Решил все таки отойти от привычной delphi, на замену была выбрана java, я в ней новичок т.ч. не пинайте сильно. ...

обработка исключений
На собеседовании задали вопрос: &quot;При обработке исключений есть ли какие-либо ограничения на вложеность&quot;? И второй вопрос, если есть...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru