powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Передать исключения в вышестоящий метод
21 сообщений из 21, страница 1 из 1
Передать исключения в вышестоящий метод
    #39192722
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос. допустим есть два класса Main и MyPrivateClass.
В MyPrivateClass может возникнуть любое исключение Checked Unchecked Errors. Какие то исключения я могу обработать в MyPrivateClass, а остальные хочу перебросить наверх.
Перечитал несколько раз
https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html
так и не понял ка это сделать. Перехватить любое исключение проблем нет http://www.xyzws.com/javafaq/how-can-i-catch-all-possible-exceptions-in-java/146
Но передать любое исключение наверх неясно. Без блока catсh в MyPrivateClass компилиться отказывается, если внутри вызовы методов классов с определенными исключениями. Определять свои исключения не хочется
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Public class main {
void main() 
{ try{
           MyPrivateClass.Start ();
} catch (Throwable e) {System.out.println}

} 
}

private class MyPrivateClass{
public void  Start{
try {
int num=0;
num=1/0;
} ??????catch (Exception e) {}


}
}


Сергей С
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39192726
Марс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76,
не понял вопроса - в чем логика какие исключения нужно ловить , какие нет - по классу исключения или оно внутри кетча ещё чего то шаманит. Если по классу то нужно указать какие конкретно экспешны ловятся, если дальше шаманствао идёт то надо перепробрасывать уже пойманые эксепшны
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39192732
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76,
1) мжт, для начала стоит усвоить Code Conventions for the Java Programming?
2) MyPrivateClass.Start (); - это что? Вызов нестатического метода как статического?
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39192733
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну допустим , я хочу обработать деление на 0 а все ошибки связанные с коннектом по JDBC которые CheckedException или Runtime
передать наверх. при этом JDBC может выдавать разные виды ошибок, не хочу для каждой чтото прописывать
Код: java
1.
2.
3.
4.
5.
6.
try {

Conn = DriverManager.getConnection("jdbc:sqlserver://myserver:1433",connectionProps);
int num=0;
num=1/0;
} ??????catch (Exception e) {}
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39192737
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76, в блоке catch проверить принадлежность исключения к дереву наследования от
java.sql.SQLException. Если условие выполняется, то выбрасывать новое исключение из этого блока.
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39192740
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywriterselis76, в блоке catch проверить принадлежность исключения к дереву наследования от
java.sql.SQLException. Если условие выполняется, то выбрасывать новое исключение из этого блока.
Так вот новое исключение придется определять самому? А мне хотелось передать его вверх "как есть", или это невозможно из за областей видимости?
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39192748
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76, тут написано, что оператор throw может принимать в качестве выражения переменную ссылочного типа. Но в случае выброса SQLException придётся декларировать типа исключения в сигнатуре метода (throws).
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39192919
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76skywriterselis76, в блоке catch проверить принадлежность исключения к дереву наследования от
java.sql.SQLException. Если условие выполняется, то выбрасывать новое исключение из этого блока.
Так вот новое исключение придется определять самому? А мне хотелось передать его вверх "как есть", или это невозможно из за областей видимости?

Нет...

На вашем коде, пример, пишу не в редакторе, но смысл наверно понятен

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
private void myMethod(...) throw SqlException, IOException, MyException {
try {
Conn = DriverManager.getConnection("jdbc:sqlserver://myserver:1433",connectionProps); // все исключения SqlException вверх
int num=0;
num=1/0;
} catch (NumberException ne) 
{
// обработайте деление на ноль
} catch (OtherException oe)
{
// обработайте другое исключение
}
.......... 



теперь везде где будете использовать например myMethod, будете обрабатывать SqlException, IOException, MyException
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39192926
Фотография JonnySKS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76Ну допустим , я хочу обработать деление на 0 а все ошибки связанные с коннектом по JDBC которые CheckedException или Runtime
передать наверх. при этом JDBC может выдавать разные виды ошибок, не хочу для каждой чтото прописывать

Ну так и отлавливайте только ошибки арифметики

Код: java
1.
2.
3.
4.
5.
try{
   // code
}catch(ArithmeticException e){
   // exception processing
}



Если нужно обработать ряд исключений различными способами то нужно двигаться с нижних уровней иерархии.
Код: java
1.
2.
3.
4.
5.
6.
7.
try{
   // Code
}catch(ArithmeticException e){
   // Arithmetic exception processing
}catch(Exception ex){
   // Other exception processing
}
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193310
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
golovonometrselis76пропущено...

Так вот новое исключение придется определять самому? А мне хотелось передать его вверх "как есть", или это невозможно из за областей видимости?

Нет...

На вашем коде, пример, пишу не в редакторе, но смысл наверно понятен

Код: java
1.
2.
private void myMethod(...) throw SqlException, IOException, MyException {
try {



теперь везде где будете использовать например myMethod, будете обрабатывать SqlException, IOException, MyException
Спасибо помогло, понял . Но возник еще вопрос
Как мне получить полную цепочку методов из которых вызвалось исключение.
Например в MyPrivateClass.Start произошла ошибка. Я их в Start не разбираю а сразу перебрасываю наверх. В верхнем блоке try может быть длинный программный код. Как мне определить что исключение произошло именно в Start ? Номер строки в классе Main и так покажет. А меня интересует название метода где произошло исключение. Желательно как цепочка. getconnection-Start - > Main
А цепочки могут быть длиннее. Стек такой информации не дает


Код: 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.
Public class main {
    void main()
    { try{
        MyPrivateClass.Start ();
 MyPrivateClass.Continue();

    } catch (Throwable e) {System.out.println (e.getMessage());} 
        //Как мне получить полную цепочку методов из которых вызвалось исключение

    }
}

private class MyPrivateClass{
   public void Continue(){} 
   public void  Start()
            throws Throwable
    {
        try {
            java.sql.Connection Conn = DriverManager.getConnection("jdbc:sqlserver://myserver:1433",connectionProps);int num=0;
            num=1/0;
        }
        finally  {;// Все Исключения автоматически перебрасываются наверх

        };


    }
}
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193396
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76Как мне получить полную цепочку методов из которых вызвалось исключение.

Логгирование?
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193458
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
try{
   // Code
}catch(ArithmeticException e){
   // Arithmetic exception processing
}catch(Exception ex){
   // Other exception processing
}



+ getSuppressed
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193701
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywriterselis76Как мне получить полную цепочку методов из которых вызвалось исключение.

Логгирование?
Да. Хочется чтобы при возникновении ошибки было понятно в каком методе она произошла и по какой цепочке исключение пошло вверх. Я конечно могу анализировать в каждом методе свои переменные для определения факта исключения, которое передали наверх. Однако возможно есть чтото готовое в Java
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193703
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1
Код: java
1.
2.
3.
4.
5.
6.
7.
try{
   // Code
}catch(ArithmeticException e){
   // Arithmetic exception processing
}catch(Exception ex){
   // Other exception processing
}



+ getSuppressed

getSupressed выдает вот такое [Ljava.lang.Throwable;@379589
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193720
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76Я конечно могу анализировать в каждом методе свои переменные для определения факта исключения, которое передали наверх. Однако возможно есть чтото готовое в JavaВам же сказали - обработайте только то, что хотите обработать и ничего не делайте для всего остального:
Код: sql
1.
2.
3.
4.
5.
try{
  Conn = DriverManager.getConnection("jdbc:sqlserver://localhost:0",connectionProps);
  int num = 1/0;
}
catch(ArithmeticException e) { /* тут наша обработка */ }

И всё - деление на ноль мы перехватили и обработали, а SQLException вылетит наружу без всякого участия с нашей стороны.
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193724
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76skywriterпропущено...

Логгирование?
Да. Хочется чтобы при возникновении ошибки было понятно в каком методе она произошла и по какой цепочке исключение пошло вверх.
Это был наводящий вопрос. Чем не устраивает вывод в лог в обработчике каждого исключения?
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193727
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywriterЧем не устраивает вывод в лог в обработчике каждого исключения?
Н-р, так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
try{
  Conn = DriverManager.getConnection("jdbc:sqlserver://localhost:0",connectionProps);
  int num = 1/0;
}
catch(ArithmeticException e) {
  logger.log(Level.WARNING, "Motherfuck - division by ZZZERO!!!");
}
catch (Exception e) {
  logger.log(Level.WARNING, "Oh, shit!!! Some GENERAL exception!!! Throwing it further!");  
  throw e;
}
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193740
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skywriterskywriterЧем не устраивает вывод в лог в обработчике каждого исключения?
Н-р, так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
try{
  Conn = DriverManager.getConnection("jdbc:sqlserver://localhost:0",connectionProps);
  int num = 1/0;
}
catch(ArithmeticException e) {
  logger.log(Level.WARNING, "Motherfuck - division by ZZZERO!!!");
}
catch (Exception e) {
  logger.log(Level.WARNING, "Oh, shit!!! Some GENERAL exception!!! Throwing it further!");  
  throw e;
}


Да в принципе можно и так,
просто по факту catch это и так обработка исключения и передать наверх значит по сути вызвать заново через throw e;
я думал в Java можно в обработчике исключения (который выше) понять как оно шло наверх
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193741
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovselis76Я конечно могу анализировать в каждом методе свои переменные для определения факта исключения, которое передали наверх. Однако возможно есть чтото готовое в JavaВам же сказали - обработайте только то, что хотите обработать и ничего не делайте для всего остального:
Код: sql
1.
2.
3.
4.
5.
try{
  Conn = DriverManager.getConnection("jdbc:sqlserver://localhost:0",connectionProps);
  int num = 1/0;
}
catch(ArithmeticException e) { /* тут наша обработка */ }

И всё - деление на ноль мы перехватили и обработали, а SQLException вылетит наружу без всякого участия с нашей стороны.
с этим уже разобрался. Сейчас осуждается вопрос логгирования прохождения исключения наверх
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193752
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76Сейчас осуждается вопрос логгирования прохождения исключения наверхА этим занимается JVM, печатая трассу стека.
Если вы не хотите трассы на десятки килобайт - делайте протоколирование. Только это отдельная задача.

P.S. Берите пример с (исчезнувших) радиокомментаторов: люди умели рассказывать о динамичной игре.
...
Рейтинг: 0 / 0
Передать исключения в вышестоящий метод
    #39193754
skywriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76я думал в Java можно в обработчике исключения (который выше) понять как оно шло наверх
Exception.getCause() (предварительно задав значение там, где нужно)?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Передать исключения в вышестоящий метод
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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