الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال بسيط يتعلق باستعمال ال Exceptions

بدأه حامي الحمى في 4 يوليو 2009 · 1 رد · 311 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

اخواني تعلمت موضوع الـ Exceptions منذ ايام، واريد ان اطبقها في سؤال ما

في فرع من فروع السؤال مطلوب انشاء كلاس باسم CreditCard وفيه المتغيرات التالية:

String CardNumber;

double balance;

int limit;

ويجب ان تكون هذه الميثود في الكلاس:

void chargeCard(double amount) throws NotEnoughMoneyException, OverTheLimitException

ومطلوب ايضاً انشاء كلاس باسم OverTheLimitException وايضاً NotEnoughMoneyException التي ترث من الكلاس Exception.

سؤالي هو كيف ممكن ان اقوم بانشاء هذان القسمان.

قرأت عبر الانترنت ولكني لم انجح في ذلك، هذا ما كتبته:

CreditCard Class:

  1.  
  2. import java.io.IOException;
  3.  
  4.  
  5. public class CreditCard {
  6. protected String CardNumber;
  7. protected double balance;
  8. protected int limit;
  9.  
  10.  
  11. /**
  12. * @param cardNumber
  13. * @param balance
  14. * @param limit
  15. */
  16. public CreditCard(String cardNumber, double balance, int limit) {
  17. super();
  18. setCardNumber(cardNumber);
  19. setBalance(balance);
  20. setLimit(limit);
  21. }
  22.  
  23.  
  24.  
  25. /**
  26. * @return the cardNumber
  27. */
  28. public String getCardNumber() {
  29. return CardNumber;
  30. }
  31. /**
  32. * @param cardNumber the cardNumber to set
  33. */
  34. public void setCardNumber(String cardNumber) {
  35. CardNumber = cardNumber;
  36. }
  37. /**
  38. * @return the balance
  39. */
  40. public double getBalance() {
  41. return balance;
  42. }
  43. /**
  44. * @param balance the balance to set
  45. */
  46. public void setBalance(double balance) {
  47. this.balance = balance;
  48. }
  49. /**
  50. * @return the limit
  51. */
  52. public int getLimit() {
  53. return limit;
  54. }
  55. /**
  56. * @param limit the limit to set
  57. */
  58. public void setLimit(int limit) {
  59. this.limit = limit;
  60. }
  61.  
  62.  
  63. public void chargeCard(double amount) throws NotEnoughMoneyException, OverTheLimitException{
  64. try{
  65. this.balance=this.balance - amount;
  66. } catch(NotEnoughMoneyException e){
  67. System.err.println(e.getMessage());
  68. }
  69. }
  70.  
  71.  
  72.  
  73. }
  74.  

لكن يظهر لي في هذا السطر:

catch(NotEnoughMoneyException e)

خطأ ما

Unreachable catch block for NotEnoughMoneyException. This Exception is never thrown from the try statement body.

لكني ام افهم ما هي المشكلة، فهذا اول استعمال لي مع الـ Exceptions

هذان هما الكلاسات الخاصة بالـ Exceptions

NotEnoughMoneyException class

  1.  
  2.  
  3. public class NotEnoughMoneyException extends Exception {
  4.  
  5. private static final long serialVersionUID = 1L;
  6. protected CreditCard card;
  7.  
  8. public NotEnoughMoneyException(){
  9. super ("You Are Havn't Enough Money To Charge");
  10. }
  11.  
  12.  
  13.  
  14. }
  15.  

OverTheLimitException class

  1.  
  2.  
  3. public class OverTheLimitException extends Exception{
  4.  
  5.  
  6. private static final long serialVersionUID = 1L;
  7.  
  8. public OverTheLimitException(){
  9. super ("You Are Over the Limited Balance ");
  10. }
  11.  
  12.  
  13.  
  14. }
  15.  

ما هو الحل وأين الخطأ او ما هو سبب الخطأ

بارك الله فيكم

السلام عليكم

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#2

السلام عليكم

اقتباس
Unreachable catch block for NotEnoughMoneyException. This Exception is never thrown from the try statement body.

ركز معي قليلا :)

public void chargeCard(double amount) throws NotEnoughMoneyException, OverTheLimitException{

try{

this.balance=this.balance - amount;

} catch(NotEnoughMoneyException e){

System.err.println(e.getMessage());

}

}

لاحظ انو انت عرفت ان الميثود هذه ترمي Exception اي كان نوعه

اذاً معني هذا الكلام ان الميثود عند استدعائها وحدث Exception فانه لا بد للميثود اللتي تستدعيها ان تقوم بمعالجة الـ Exception هذا "handling the exception"

فما فائدة ان تقوم بتعريف الداله بانها سترمي Exception في حال انك قمت بمعالجة نفس هذا الـ Exception داخل جسم الداله

لذلك اما ان تعرف الداله بانها سترمي Exception او تقوم بمعالجة الـ Exception مسبقاً

##########

أما عن معني الإيرور الذي يحدث معك .. فالـ catch block لا يستطيع الكومبايلر الوصول اليه

لان الـ Exception لم يحدث داخل الـ try block حتي يقوم الكومبايلر بالقفز للـ catch block حتي يتم معالجة الـ Exception

احذف الـ try / catch block من الداله وجرب البرنامج

صــفــر

مواضيع مشابهة