دوستان میتونیم دسترسی به همه خطاهایی که رخ داده داشته باشیم؟ مثلا تو کلاس پدر خطای رخ داده و از کلاس فرزند متوجه اون بشیم
دوستان میتونیم دسترسی به همه خطاهایی که رخ داده داشته باشیم؟ مثلا تو کلاس پدر خطای رخ داده و از کلاس فرزند متوجه اون بشیم
تا جایی که من میدونم Exception ها در method رخ میدن و یا خودشون اون رو هندل میکنن یا به متدی میفرستن که اون متد رو فراخوانی کرده. پس یه حالت "برگشتی" داره و رو به جلو نیست. و در نهایت اگر هیچ کدوم از متدها اون رو catch نکنن خود jvm در متد main اون رو catch میکنه و trace اون رو چاپ میکنه.
البته راه برای اینکه همه خطاها رو جمع آوری کنید وجود داره. از کتابخونه ای مثل Log4j استفاده کنید یا خودتون میتونید پیاده سازی هایی رو انجام بدید که همه رو یه جا جمع آوری کنید.
اما اینکه خطاهای کلاس پدر در کلاس فرزند گرفته بشه، اگر درستترش بگیم اگر شیء ای از کلاس فرزند داشته باشیم که خطایی در متد این شیء رخ بده (در کلاس پدر) و همچنین کلاس پدر اون رو catch نکرده باشه و شما در کلاس فرزند فراخوانی کنید، بله دسترسی دارید. در کل ارتباطی به کلاس نداره همونطور که گفتم Exception از طریق فراخوانی متدها مسیرش مشخص میشه
تشکر
فرض کنیم کلاس پدر متد ابسترکتی صدا زده میشه که قبل و بعد از فراخوانی هم عملیات خودش رو داره، در نهایت این متد از فرزند ریترن میشه و بعد از اون خطا رخ میده، دسترسی به کد پدر نیست، دسترسی به متد main وجود نداره، متدی از متدهای پدر رو صدا نمیزنم. با این حال، امکان داره همچنان؟
یه چیزی مثل application event
جمله اولتون مفهوم نیست. ولی اگر منظورتونه متد abstract صدا زده بشه از اونجایی که متد abstract رو باید پیاده سازی کنید در نتیجه اونجایی که پیاده سازی میشه Exceptionهاش گرفته میشه.
فکر میکنم شما اینجا به اشتباه خودتون رو درگیر کلاس parent و child کردید. در کل فرض کنید شما یک کلاس دارید (مهم نیست رابطه parent-child داشته باشند) که یک متد از یک کتابخانه رو فراخوانی میکنه. اگر در اون متد هر exception ای که throw میشه catch هم شده باشه، اونوقت شما در هر کلاسی به اون دسترسی ندارید (چون catch شده و تمام)
ولی معمولا کتابخونه هایی که خوب نوشته بشن، خیلی از Exceptionها رو catch نمیکنن تا کاربر بتونه عملیات لازم رو انجام بده. برای اینکار به جای اینکه در متد خودشون catch کنن در تعریف متد به این صورت مینویسن:
public void doSth() throws IOException, NullPointerException{
...
}
در این حالت هر جا شما متد doSth رو فراخوانی کنید یا این Exception ها رو باید catch کنید یا در اون متد فراخوانی کننده باز باید بالاش throw IOException,... بنویسید تا به فراخوانی کننده اون ارسال بشه. و همونطور که گفتم در نهایت اگر در متد main هم catch نشه توسط jvm گرفته میشه و خطاها نمایش داده میشه
موفق باشید