Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Передать исключения в вышестоящий метод / 21 сообщений из 21, страница 1 из 1
15.03.2016, 20:26
    #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
15.03.2016, 20:29
    #39192726
Марс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать исключения в вышестоящий метод
selis76,
не понял вопроса - в чем логика какие исключения нужно ловить , какие нет - по классу исключения или оно внутри кетча ещё чего то шаманит. Если по классу то нужно указать какие конкретно экспешны ловятся, если дальше шаманствао идёт то надо перепробрасывать уже пойманые эксепшны
...
Рейтинг: 0 / 0
15.03.2016, 20:37
    #39192732
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать исключения в вышестоящий метод
selis76,
1) мжт, для начала стоит усвоить Code Conventions for the Java Programming?
2) MyPrivateClass.Start (); - это что? Вызов нестатического метода как статического?
...
Рейтинг: 0 / 0
15.03.2016, 20:39
    #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
15.03.2016, 20:42
    #39192737
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать исключения в вышестоящий метод
selis76, в блоке catch проверить принадлежность исключения к дереву наследования от
java.sql.SQLException. Если условие выполняется, то выбрасывать новое исключение из этого блока.
...
Рейтинг: 0 / 0
15.03.2016, 20:44
    #39192740
selis76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать исключения в вышестоящий метод
skywriterselis76, в блоке catch проверить принадлежность исключения к дереву наследования от
java.sql.SQLException. Если условие выполняется, то выбрасывать новое исключение из этого блока.
Так вот новое исключение придется определять самому? А мне хотелось передать его вверх "как есть", или это невозможно из за областей видимости?
...
Рейтинг: 0 / 0
15.03.2016, 21:01
    #39192748
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать исключения в вышестоящий метод
selis76, тут написано, что оператор throw может принимать в качестве выражения переменную ссылочного типа. Но в случае выброса SQLException придётся декларировать типа исключения в сигнатуре метода (throws).
...
Рейтинг: 0 / 0
16.03.2016, 09:14
    #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
16.03.2016, 09:25
    #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
16.03.2016, 14:31
    #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
16.03.2016, 15:21
    #39193396
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать исключения в вышестоящий метод
selis76Как мне получить полную цепочку методов из которых вызвалось исключение.

Логгирование?
...
Рейтинг: 0 / 0
16.03.2016, 16:02
    #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
16.03.2016, 18:31
    #39193701
selis76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать исключения в вышестоящий метод
skywriterselis76Как мне получить полную цепочку методов из которых вызвалось исключение.

Логгирование?
Да. Хочется чтобы при возникновении ошибки было понятно в каком методе она произошла и по какой цепочке исключение пошло вверх. Я конечно могу анализировать в каждом методе свои переменные для определения факта исключения, которое передали наверх. Однако возможно есть чтото готовое в Java
...
Рейтинг: 0 / 0
16.03.2016, 18:32
    #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
16.03.2016, 18:49
    #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
16.03.2016, 18:51
    #39193724
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать исключения в вышестоящий метод
selis76skywriterпропущено...

Логгирование?
Да. Хочется чтобы при возникновении ошибки было понятно в каком методе она произошла и по какой цепочке исключение пошло вверх.
Это был наводящий вопрос. Чем не устраивает вывод в лог в обработчике каждого исключения?
...
Рейтинг: 0 / 0
16.03.2016, 18:57
    #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
16.03.2016, 19:07
    #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
16.03.2016, 19:09
    #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
16.03.2016, 19:14
    #39193752
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать исключения в вышестоящий метод
selis76Сейчас осуждается вопрос логгирования прохождения исключения наверхА этим занимается JVM, печатая трассу стека.
Если вы не хотите трассы на десятки килобайт - делайте протоколирование. Только это отдельная задача.

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


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