|
|
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
посмотрите пожалуйста правильно ли расставлены try-catch. Начала учить Java и не совсем понимаю эту их систему с Exceptions. Код: plaintext 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 12:57 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
import java.sql.Connection; import java.sql.Statement; import java.sql.SQLException; import java.sql.DriverManager; // свое исключение class MyCustomException extends Exception { public MyCustomException(Throwable t) { // можно создать и другие конструкторы super(t); } } public class Create { // есть проблемы с форматированием. посмотри Sun Code Conventions // желательно кидать свои исключения public void Create_Tables(Connection conn) throws MyCustomException { Statement stmt = null; try { stmt = conn.createStatement(); // обычно работа с stmt идет здесь же } catch(SQLException e) { // указываем самое нижнее по иерархии генерируемое исключение throw new MyCustomException(e); // нехорошо создавать SQLException самому } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { // ничего не делаем, но можно и сгенерить, но тогда потеряется первое исключение если было } } } } public static void main(String[] args) throws Exception { //Load the JDBC driver try { Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch (Exception e) { System.err.println("Unable to load driver."); e.printStackTrace(); } Connection conn = null; try { System.out.println("* Connecting..."); String url = "jdbc:mysql://" + config.hostname + ":" + "3306" + "/" + "db_name"; conn = DriverManager.getConnection(url, config.user, config.password); Create c = new Create(); c.Create_Tables(conn); } catch (MyCustomException e) { System.out.println("SQLException: " + e.getMessage()); e.printStackTrace(); // System.exit(1); и так выйдет } finally { System.out.println("* Datenbank-Verbindung beenden"); if (conn != null) { try { conn.close(); // ошибки уже нет ;) } catch (SQLException e) { // ничего не делаем, но можно и сгенерить, но тогда потеряется первое исключение если было } } } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 13:13 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
Непосмотрел на форматирование. Так лучше Код: plaintext 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. 62. 63. 64. 65. 66. 67. 68. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 13:14 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
К тому же main() может уже ничего не кидать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 13:16 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
2BlackWall: как хорошо обьяснил, спасибо большое! Буду теперь по примеру учиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 14:28 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
2BlackWall: почему лучше свои исключения кидать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 14:40 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
Потому что исключение вроде SQLException является характерным для кода, работающего с БД, а его появление или перехват на более высоком уровне, скажем, в коде GUI, не является хорошим тоном. Код более высокого уровня не должен вдаваться в подробности реализации работы с БД, он все равно не сможет корректно обработать ошибку. Поэтому исключения вроде SQLException принято "оборачивать" в другие, более общие, скажем глобальные для данного приложения. Т.е. в случае ошибок сети, когда генерируется IOException, его тоже следует "обернуть", выкинуть и обработать на соответствующем уровне. Ну а обработка для GUI-приложения скорее всего будет заключаться в выводе окошка "Ошибка тра-ля-ля", возможно с деталями вроде стека исключений. Тут можно посоветовать чаще смотреть на чужой код, как для поиска своих, так и чужих ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 15:05 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
BlackWall, если вдруг Вам попадётся кусочек хорошего кода, где представлена правильная обработка ошибок, очень буду благодарна если запостите в эту темку. Т.к., к сожалению, чужой код у меня посмотреть нет возможности :( Только по книжкам приходится учиться, а там, как правило поверхностно обьяснено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 15:50 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
Большой такой кусок кода ;) Целый проект. Форум на Java, по аналогии с phpBB. Если и не для изучения технологий, то для языка может быть полезным. https://javabb.dev.java.net/files/documents/1976/21434/javabb_073.zip ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 16:46 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
Java_startпопадётся кусочек хорошего кода, где представлена правильная обработка ошибок Вообще-то об этом понаписано много.... Вот полезные статьи: http://bdn.borland.com/article/0,1410,29664,00.html http://www.phptr.com/articles/printerfriendly.asp?p=433387&rl=1 А кроме того, в дополнение к сказанному BlackWall, хочу заметить, что в правильной иерархии кода (а код всегда иерархичен - есть низкоуровневые операции типа оступа к БД или к файлам, есть промежуточные типа обработки, есть высокоуровневые типа GUI или той же функции main() ) исключение, как правило, не должно перескакивать уровни - за исключением, возможно, отдельных классов критических исключений. Функция более низкого уровня должна возвращать "наверх" либо результат, либо сообщение об ошибке, а с исключениями разбираться "внутри", при формировании результата и сообщения об ошибке. В принципе, конечно, сообщение об ошибке может быть послано путем "оборачивания" в пользовательские исключения, как рекомендует BlackWall, но такой подход требует тщательности. Я лично его избегаю везде, где это не имеет явного смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 17:12 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
Спасибо, буду читать и смотреть код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 17:53 |
|
||
|
расстановка try-catch
|
|||
|---|---|---|---|
|
#18+
Оборачивание - это обычная практика. Нет необходимости просматривать всю цепочку исключений на верхнем уровне, но сохранение исходного исключения в оборачивающем полезно как минимум для логирования. А так все верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 17:53 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33614642&tid=2149843]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
159ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 430ms |

| 0 / 0 |
