استثناها در جاوا
اسلاید 1: مظفر بگ محمدیدانشگاه ایلاماستثناء ۱
اسلاید 2: رسیدگی به خطاها2در یک جهان ایده آل، تمام خطاها در هنگام کامپایل کد اتفاق می افتند و رفع می شوند. لذا هنگام اجرا خطایی رخ نمی دهد. اما در واقعیت اینطور نیست.خطاها هنگام اجرای کد اتفاق می افتند و باید توسط مکانیسمی مورد رسیدگی قرار گیرند که:به تولید کننده (یا تشخیص دهنده) ی خطا اجازه میدهد که اطلاعات خطا را به گیرنده ی خطا ارسال نماید و این گیرنده است که می داند با خطا چکار کند.
اسلاید 3: روش رسیدگی به خطاها در C3#define DEPOSIT_NEGATIVE -1#define DEPOSIT_OK 0int VerifyDeposit(int amount) {if (amount < 0 ) return DEPOSIT_NEGATIVE;else return DEPOSIT_OK}int depositStatus = VerifyDeposit(amt);if (depositStatus == DEPOSIT_OK) } // do something good} else {// deal with the error}
اسلاید 4: روش بهتر رسیدگی به خطا4تفکیک تشخیص خطا از رسیدگی به خطاپیاده کننده ی کلاس خطاها را تشخیص می دهد.کاربر کلاس تصمیم می گیرد که با خطا چکار کند. خروج از برنامهچاپ پیغام مناسب و ادامه ی برنامهاجرای مجدد متد دارای خطاسوال از کاربر یا هر کار مناسب دیگرکاهش پیچیدگی کدکد عادی برنامه که اگر اتفاق ناجوری نیفتد کار خواهد کرد ، از کدی که به خطاها رسیدگی می کند جدا شده است. زبان جاوا برنامه نویس را مجبور می کند که به خطا رسیدگی کند.
اسلاید 5: try-throw-catch5روش پایه ی رسیدگی به خطاها در جاوا استفاده از سه گانه ی try-throw-catch است.
اسلاید 6: مثال try-throw-catch6Scanner in = new Scanner( System.in);System.out.println( “Enter Amt: “);try {int amt = in.nextInt( );if (amt < 0)throw new Exception( “Negative value was input”);System.out.println (“Thanks for your deposit”);// more code that assumes the amt is not negative}catch( Exception e ){// do something about the exception}System.out.println( “Have a nice day”);
اسلاید 7: بلوک try7کدی که ممکن است استثنا تولید کند در داخل بلوک try قرار می گیرد. بلوک try شامل کد اصلی الگوریتم یا برنامه ی کاربر است. این بلوک روند درست انجام کار را مشخص می کند. کدی که به خطا رسیدگی می کند در داخل بلوک catch قرار می گیرد. بلوک catch بلافاصله بعد از بلوک try قرار دارد.
اسلاید 8: مثالthrow 8وقتی که کد برنامه خطا را تشخیص داد یک شی از نوع استثنا را گسیل می کند. public class BankAccount {private int balance;public BankAccount( ) {balance = 0;}public int getBalance( ) { return balance; }// precondition – amount must be nonnegative// throws an exception if amount is negative// postcondition – balance updatedpublic int deposit( int amt ) throws Exception {if (amt < 0 )throw new Exception(“Deposit is Negative” );balance += amt;}
اسلاید 9: کد درست سپرده گذاری در بانک9public class DepositExample { public static void main( String[ ] args ) {BankAccount myAccount = new BankAccount( );try { Scanner input = new Scanner( System.in ); System.out.print(“Enter deposit amount: “); int amt = input.nextInt(); myAccount.deposit( amt ); System.out.println( “New Balance = “ + myAccount.getBalance()); }catch (Exception e){ // code that “handles” a negative deposit System.out.println( e.getMessage( ));}System.out.println( “GoodBye” );}
اسلاید 10: 10مکانیسم try-throw-catchهنگام گسیل استثنا، اجرای کد بلوک try متوقف می شود و اجرا به بلوک catch منتقل می شود. مقدار گسیل شده همان پارامتر دستور throw است و یک شی از کلاس استثنا است. بلوک catch یک پارامتر دارد که از طریق دستور throw برای آن گسیل می شود. اجرای بلوک catch همان عمل رسیدگی به استثنا است.
اسلاید 11: 11catch( Exception e ) { . . . }شناسه ی e در سرآیند بلوک catch همان پارامتر بلوک catchاست. پارامتر بلوک catch دو کاربرد دارد:مشخص کردن نوع استثنای گسیل شده (در مثال فوق Exception )نامگذاری استثنا (در مثال فوق همان e). می توان به جای e از هر اسم دیگری استفاده کرد. مکانیسم try-throw-catch
اسلاید 12: try-catch Control Flow12try{ // code that might throw an Exception // more code }catch(Exception e){ // handle error here}// Method continues hereحالت 1بلوک try استثنایی تولید نمی کند.بعد از اتمام اجرای بلوک try، کد بلوک catch را نادیده می گیریم.
اسلاید 13: 13try-catch Control Flowtry{ throw new Exception( “message”); // more code}catch(Exception e){ // handle error here}// Method continues hereحالت 2بلوک try یک استثنا تولید می کند.اجرای بلوک try متوقف می شود. اجرای بلوک catch شروع می شود.بعد از اتمام اجرای بلوک catch، بقیه ی برنامه اجرا می شود.
اسلاید 14: 14کلاسهای Exception زبان جاوا کلاسی به اسم Exception تعریف کرده است. در کتابخانه های جاوا کلاسهای استثنای دیگری نیز وجود دارند.برنامه نویس می تواند کلاس استثنای جدیدی تعریف کند. تمام کلاسهای استثنای تعریف شده توسط جاوا دو خاصیت دارند:یک جزء سازنده دارند که آرگومان آن از نوع رشته است. یک متد به اسم getMessage دارند که رشته ی ارسال شده به کلاس استثنا در هنگام ساخت شی را بر می گرداند.کلاسهای استثنای تعریف شده توسط برنامه نویس نیز باید این خاصیتها را داشته باشند.
اسلاید 15: 15کلاس Exception کلاس Exception ریشه ی بقیه ی کلاسهای استثنا است. اگر چه می توان از کلاسException مستقیماً استفاده کرد، بهتر است که از این کلاس یک کلاس جدید مشتق کنیم و از آن استفاده کنیم. کلاس Exception در بسته ی java.lang قرار دارد که نیازی به import ندارد.
اسلاید 16: 16 استفاده از متد getMessage. . . // method codetry{ . . . throw new Exception( StringArgument ); . . .}catch(Exception e){ String message = e.getMessage(); System.out.println(message); System.exit(0);} . . .
اسلاید 17: 17 استفاده از متد getMessageهر استثنا یک متغییر نمونه از نوع رشته دارد که شامل یک پیغام است. این پیغام دلیل خطا را مشخص می کند. در مثال قبلی، StringArgument آرگومان جزء سازنده ی Exception است. می توان با دستور e.getMessage() مقدار این رشته را از استثنای e استخراج کرد.
اسلاید 18: 18حفظ خاصیت های getMessageدر کلاسهای استثنای تعریف شده توسط کاربر، متد getMessage باید رشته ای را برگرداند که هنگام ایجاد شی به عنوان آرگومان به شی داده شده است. یا اگر جز سازنده ی بدون آرگومان صدا زده شود، باید از پیغام پیش فرض استفاده شود. لذا در کلاسهای استثنای تعریف شده توسط کاربر:باید یک جزء سازنده وجود داشته باشد که یک رشته بعنوان آرگومان بپذیرد و بدنه ی آن با فراخوانی super شروع شود. یک جزء سازنده ی بدون آرگومان باید وجود داشته باشد که super را فراخوانی کند. متد super حتما باید یک آرگومان از نوع رشته داشته باشد.
اسلاید 19: 19A Programmer-Defined Exception Class
اسلاید 20: 20نکته: کلاس استثنا می تواند غیر از رشته متغییرهای دیگری نیز داشته باشد.می توان جز سازنده ای داشت که آرگومان آن از نوع رشته نباشد. مقدار را در یک متغییر نمونه ذخیره می کنیم. برای این متغییر خصوصی باید متد دسترسی (get) را تعریف کنیم.
اسلاید 21: 21یک کلاس استثنا با پیغام int
اسلاید 22: سازنده ها و استثناها22اگر پارامتر نادرستی به یک جزء سازنده ارسال شود، می توانیم یک استثنا تولید کنیم. public class BankAccount {private int balance;public BankAccount( int startingBalance ) throws Exception {if (startingBalance < 0) throw new BadNumberException( startingBalance );balance = startingBalance;}}
اسلاید 23: trying constructors23public class BankAccountDemo {public static void main( String[ ] args ) { BankAccount myAccount; // outside the try block???try { Scanner in = new Scanner( System.in ); System.out.print( “Input starting balance: “ ); int startBalance = in.nextInt( ); myAccount = new BankAccount( startBalance ); // more of the good stuff here}catch (BadNumberException bne ){ // handle the bad input System.out.println(“Deposits must be postive”); Sysetem.out.println(“You entered “ + bne.getBadNumber());}System.out.println( “good bye “);
نقد و بررسی ها
هیچ نظری برای این پاورپوینت نوشته نشده است.