שאלה ב JAVA

שאלה ב JAVA

אני לא מבין את הרעיון של try and catch
זה נראה לי ממש דומה ל if and else
מישהו יכול להסביר לי את ההבדלים ??
 
מה הדמיון?

כשיש if ו-else, אחד מהם מתבצע, והשני לא, כתלות בתנאי.
כשיש try, הוא מתבצע עד שנזרקת חריגה, ואז עוברים ל-catch.
(היתרון הגדול של המנגנון, הוא שאפשר לזרוק חריגה גם מתוך פונקציה אחרת)
 

ihovav

New member
זה משהו בסיסי בתכנות בכלל, לא רק ב JAVA

EXCEPTIONS (חריגות בלעז) זה מצב בו התכנית מבצעת פעולה בלתי חוקית וצריכה לעוף מיד, ברוב המקרים יש מה לעשות ע"מ לתקן את הליקוי.
אם אתה לא תתפוס את הEXCEPTION התכנית תעוף - זה אמור להראות לך שזה לא IF-ELSE...
אבל יש משהו בהקבלה הזו - כשאתה "מקיף" קטע קוד ב TRY עם CATCH ל EXCEPTION XXX אתה בעצם מבצע: IF EXCEPTION XXX THAN...
מה ששונה מבלוקים של IF ELSE זה שפה אתה מקבל את התכנית במצב לא ידוע, אתה לא יודע (באופן עקרוני, כמובן שאם אתה משתמש בזה נכון אתה יודע בדיוק איפה עפת ועל מה) מה ואיפה גרם לEXCEPTION.
שימוש נכון זה לעטוף קטעים קריטיים ע"מ לוודע סגירה של משאבים כמו למשל כתיבה ל DB שנכשלת: אתה תרצה לסגור את ה CONNECTION למרות שהפעולה נכשלה כי פעולת הפתיחה של ה CONNECTION בוצעה בהצלחה, זה הכתיבה שנכשלה...

באופן כללי - בשביל ניקויים כאלו ופעולות שחייבות להתבצע תמיד יש את FINALLY... שווה לך לקרוא עליו
 

nocgod

New member
בנוסף למה שכבר נכתב לך

כמו שאמרו try-catch-finally זה אך ורק למקרים חריגים, לצורך עניין הקפצת שגיאה מרמת הDAL לרמת הBLL או מרמת הBLL לרמת התצוגה
בשום פנים ואופן אסור להשתמש בזה במקום if-else כי:
א. if-else הוא הוא מנגנון flow-control
ב. try-catch-finally איננו מנגון flow-control גם אם זה נראה ככה בהתחלה, הוא מנגון לטיפול בexceptional states בתוכנית, דוגמא הכי פשוטה לזה היא מקרה של חישוב מתמטי כלשהו ובתוכו מגיעים לחלוקה ב0 בטעות
ג. כאשר מתבצעת זריקה של exception מתבצע תהליך שנקרא stack unwinding תהליך שהוא יקר מבחינת הevnvironment שלך ובכללי פוגע בביצועי התוכנית שלך
 
למעלה