CodeGym /مدونة جافا /Random-AR /المستوى القديم 09
John Squirrels
مستوى
San Francisco

المستوى القديم 09

نشرت في المجموعة

المعرفة مقابل المهارات

المستوى القديم 09 - 1علمتنا الكلية أنه لا يوجد فرق كبير بين النظرية والتطبيق. حسنا، بالتأكيد أنت تفهم أن هذا ليس هو نفسه. لكنك لا ترى الفرق الأساسي. ولكن هناك واحد. معظم الناس يضعون علامة المساواة بين "أعرف" و"أستطيع". هل أنت؟ ماذا عن بعض الأمثلة؟
  1. أعلم أن التدخين مضر بالنسبة لي، لكني أدخن.
  2. أعلم أن الوجبات السريعة مضرّة بالنسبة لي، لكني أتناولها.
  3. أعرف قواعد المرور ولكني لا أستطيع القيادة.
  4. أعلم أن الركض مفيد بالنسبة لي ولكني لا أمارس الركض في الصباح.
غالبًا ما يحدث أن الناس يأخذون عبارة "أعرف" على أنها "أستطيع". إنه مثال جيد مع قواعد المرور. إذا كان الشخص يعرف اللوائح ويعرف كيفية القيادة، فهل يعني ذلك أنه يستطيع القيادة؟ لا. ماذا لو كان يعتقد أنه يعرف كيفية القيادة؟ فلماذا يحتاج إلى مدرب - فهو يعرف كل شيء بالفعل. عندما تكون متأكدًا من أنك تعرف كل شيء بالفعل، فمن المحتمل أنك لن تتعلم أي شيء جديد. وإذا كنت متأكدًا من أنك تعرف كيفية القيام بكل شيء، فلن تدرس. فكرة كهذه لن تخطر على بالك. وهذا يعني أنك سوف تفوت كل الفرص الرائعة لتعلم شيء ما. الكلية المعتادة لا تمنحك إلا المعرفة؛ سيكون عليك اكتساب المهارات بنفسك. ولكن ماذا أسمع؟ هل كان لديك ممارسة إلى جانب النظرية في كليتك؟ حسنًا، إذا كنت تدرس في كلية الفيزياء ، فاصنع نموذجًا عمليًا لمحرك بخاري بكفاءة لا تقل عن 20%. أراهن أنك تعرف كيفية القيام بذلك، ولكنك لن تكون قادرًا على القيام بذلك، أليس كذلك؟ أنت الكيميائي ؟ اصنع مسحوقًا عديم الدخان. أنت تعرف كيف، ولكنك لا تستطيع، ها؟ عالم الرياضيات، هل أنت؟ احسب مسار قذيفة مدفعية. لا تنس أن تأخذ في الاعتبار شكل الصدفة. النقاط الرياضية لا تطير في الحياة الحقيقية. ولا توجد خيول كروية. المستوى القديم 09 - 2أحيائي؟ عزل البنسلين. هذا العفن ينمو على البطيخ، كما تعلم. أنت تعرف كيف – رائع! هل يمكنك فعل ذلك؟ خبير اقتصادي؟ تقديم توقعات لنمو الأسعار على النفط. منتهي؟ والآن قم بتحويله إلى 2000 دولار أو 200000 دولار سنويًا بناءً على توقعاتك. هل سبق لك أن لعبت في الفوركس؟ من أجل المال الحقيقي؟ أو هل تعرف فقط ما هو؟ الاقتصاد العالمي؟ رائع! أين أفتح شركة خارجية؟ في هونغ كونغ، أيرلندا أو في الولايات المتحدة الأمريكية. لماذا؟ حتى لو كنت تعرف ذلك، وهو أمر مشكوك فيه، فمن الصعب أن تتمكن من القيام بذلك، لأنك لم تفعل ذلك أبدًا. ليس لديك حتى أدنى فكرة عن كيفية القيام بذلك. أوه، أنت لم تدرس ذلك في الكلية؟ بأي حق أعطيك مهام لست مستعداً لها؟ لأن هذه هي مهام الحياة الحقيقية. هذه هي الممارسة ، كل ما درسته في الكلية هو: الخيول الكروية، المنافسة الكاملة - لا يوجد أي منها في الحياة الواقعية. ولكن لماذا نسيت أن أذكر أخصائي التسويق ؟ ما هي أفضل طريقة لإنفاق الـ 500 دولار الخاصة بي حتى يعرف أكبر عدد ممكن من الناس عن محاضراتي؟ على الإعلان؟ هل تعلم أنه ليس فقط الإعلان الكلاسيكي قد عفا عليه الزمن بالفعل، ولكن أيضًا مفهوم USP (عرض البيع الفريد)، والذي أنا متأكد من أنك تعلمته في الكلية باعتباره الدواء الشافي الفريد تقريبًا. ننسى أنك تعرف أي شيء. اسأل نفسك - ماذا يمكنني أن أفعل؟ مفيد يعني؟ شيء سيدفع الناس المال مقابله؟ المال الجيد يعني؟ لذا، أيها الأصدقاء، دعونا نعرب عن امتناننا لهذه الدورة الرائعة مثل CodeGym. وبفضل ذلك، لن تعرف كيفية البرمجة فحسب، بل ستتمكن بالفعل من القيام بذلك. ستتمكن أيضًا من الحصول على وظيفة وكسب أموال جيدة في غضون سنوات قليلة. آمل أن يكون هذا المال كافيًا للعيش بشكل لطيف ومريح. سأقولها مرة أخرى، حتى تتذكر: لا يهم ما تعرفه. الشيء الوحيد المهم هو المهارات المفيدة التي تمتلكها، والتي يتوق الناس إلى أن يدفعوها لك. كلما أسرعت في فهم هذا، كلما كان ذلك أفضل.

لقد وصلت إلى مستوى جديد

المستوى 9

المستوى القديم 09 - 3

1 ريشة، تتبع المكدس

المستوى القديم 09 - 4- يا! سأخبرك اليوم ما هو تتبع المكدس. لكن دعني أشرح لك أولاً ما هو المكدس. - تخيل كومة من الأوراق - مهام لموظف معين. يمكن وضع مهمة جديدة في أعلى المكدس، وسيأخذ مهمة من أعلى المكدس. وبالتالي، لن يتم تنفيذ المهام على أساس أسبقية الحضور. في كل مرة يتولى فيها الموظف المهمة التي تأتي أخيرًا. يُطلق على هيكل التجميع هذا اسم المكدس . - في جافا، هناك مجموعة خاصة - Stack. تحتوي هذه المجموعة على طرق «إضافة عنصر» و«أخذ (الحصول على/إزالة) عنصر». كما تعلمون، سيتم أخذ العنصر الأخير المضاف أولاً. - همم. أعتقد أن الأمر ليس صعبًا. - بخير. ثم اسمحوا لي أن أشرح ما هو تتبع المكدس . - تخيل أنه في Java تستدعي الدالة А الدالة B ، وهذه الأخيرة تستدعي الدالة C ، والتي بدورها تستدعي الدالة D. لذلك، للخروج من الدالة B ، يجب عليك أولاً الخروج من الدالة C ، وللقيام بذلك عليك الخروج من الدالة D. هذا مشابه جدًا للمكدس. - وما هو التشابه؟ - في المكدس، للوصول إلى مهمة معينة، عليك أيضًا إكمال جميع المهام الموضوعة في الأعلى. - حسنًا، إنه تشبيه نوعًا ما، لكنني لست متأكدًا مما إذا كنت أفهم كل شيء بشكل صحيح. - انظر هنا. في Java المكدس عبارة عن مجموعة من العناصر. إنها مثل أوراق في كومة. لتأخذ الثالثة من الأعلى، عليك أن تأخذ الورقة الثانية، ولكن قبل ذلك عليك أن تأخذ الورقة الأولى. يمكنك دائمًا وضع الأوراق وأخذها، لكن يمكنك وضعها في الأعلى فقط وأخذها من الأعلى فقط. الأمر نفسه ينطبق على استدعاء الوظيفة. الدالة А تستدعي الدالة B ، والأخيرة تستدعي الدالة C. للخروج من А ، يجب عليك أولاً الخروج من B ، وللقيام بذلك عليك الخروج من C. - انتظر دقيقة. إذا قمت بذلك بشكل صحيح، فستظهر المكدس بأكمله في «يمكن أخذ الورقة الأخيرة التي تم وضعها على المكدس فقط» و «أولاً، يجب الخروج من آخر وظيفة تم استدعاؤها». هل هذا صحيح؟ - نعم. لذلك، فإن تسلسل استدعاءات الوظائف هو «مكدس استدعاءات الوظائف»، أو ببساطة «مكدس الاستدعاءات». يجب إنهاء الوظيفة التي تم استدعاؤها أخيرًا أولاً. لننظر إلى المثال: المستوى القديم 09 - 5- حسنًا. أعتقد أن كل شيء واضح مع استدعاء الوظيفة. ولكن ما هو StackTraceElement هذا ؟ - يقوم جهاز Java الظاهري بتسجيل جميع استدعاءات الوظائف. لهذا الغرض، لديها مجموعة خاصة - المكدس. عندما تستدعي دالة أخرى، يضع JVM عنصرًا جديدًا StackTraceElementفي هذه المكدس. عندما تنتهي الوظيفة، يتم حذف العنصر من المكدس. وبالتالي، يقوم هذا المكدس دائمًا بتخزين معلومات محدثة حول الحالة الحالية لـ «مكدس استدعاء الوظيفة». - يحتوي كل StackTraceElement على معلومات حول الطريقة التي يتم استدعاؤها. لذا يمكنك الحصول على اسم هذه الطريقة باستخدام getMethodName . - المثال أعلاه يوضح ذلك:
  1. احصل على «مكدس الاستدعاءات»:
  2. قم بتكرار المصفوفة باستخدام الحلقة for-each . أتمنى أنك لم تنساه.
  3. طباعة أسماء الطرق إلى System.out .
- شيء مثير للاهتمام، وسهل على ما يبدو. شكرا لك، ريشا!

2 دييغو، مهمة عرض تتبع المكدس

- مهلا، أميغو! إليك مهمة صغيرة لعرض تتبع المكدس على الشاشة.
مهام
1 يجب أن تقوم كل طريقة بإرجاع StackTrace
Write خمس طرق تتصل ببعضها البعض. يجب أن تقوم كل طريقة بإرجاع StackTrace الخاص بها.
2 StackTrace
اكتب خمس طرق تتصل ببعضها البعض مرة أخرى. يجب أن تقوم كل طريقة بإرجاع اسم طريقة المتصل الخاصة بها. يمكنك الحصول على طريقة المتصل باستخدام StackTrace.
3 يجب أن تقوم الطريقة بإرجاع رقم سطر التعليمات البرمجية التي تم استدعاء هذه الطريقة من
كتابة خمس طرق تتصل ببعضها البعض. يجب أن تقوم كل طريقة بإرجاع رقم سطر الكود الذي تم استدعاء هذه الطريقة منه. استخدم الدالة element.getLineNumber() .
4 تتبع المكدس لـ 10 مكالمات
اكتب التعليمات البرمجية للحصول على تتبع المكدس لـ 10 مكالمات.
5 يجب أن تقوم الطريقة بإرجاع نتيجة - عمق تتبع المكدس الخاص بها.
اكتب طريقة تعرض وإرجاع عمق تتبع المكدس الخاص بها. عمق تتبع المكدس هو عدد أساليبه (عدد العناصر في القائمة).

3 إلي، الأخطاء والاستثناءات

- مهلا، أميغو! اليوم لدينا درس مثير للاهتمام للغاية. سأخبرك عن الاستثناءات. الاستثناء هو آلية خاصة للتحكم في الأخطاء في البرنامج. فيما يلي بعض الأمثلة على الأخطاء التي قد تحدث في البرنامج:
  1. يحاول البرنامج كتابة ملف على القرص الكامل.
  2. يحاول البرنامج استدعاء أسلوب متغير يقوم بتخزين المرجع الفارغ.
  3. يحاول البرنامج قسمة رقم على 0.
تؤدي هذه الإجراءات إلى حدوث خطأ. عادةً ما يؤدي هذا إلى إغلاق البرنامج ، ولا داعي لمواصلة تنفيذ التعليمات البرمجية. - لماذا هذا؟ - هل هناك أي معنى لتدوير عجلة القيادة عندما تسقط السيارة من الهاوية؟ - هل تقصد أن البرنامج يجب أن ينتهي؟ - نعم. هكذا كان الأمر من قبل. أي خطأ أدى إلى إنهاء البرنامج. - إنه قرار ذكي للغاية. - أليس من الأفضل أن نحاول العمل عليها؟ - نعم. لقد كتبت نصًا ضخمًا في برنامج MS Word، وقمت بحفظه، ولم يتم حفظه، لكن البرنامج يخبرك أن كل شيء على ما يرام. وتستمر في الكتابة. سخيف، أليس كذلك؟ - نعم. - ثم توصل المبرمجون إلى خطوة مثيرة للاهتمام: حيث قامت كل وظيفة بإرجاع حالة عملها. 0 يعني أن الوظيفة تعمل كما كان من المفترض أن تعمل، أي قيمة أخرى – أن هناك خطأ : هذه القيمة كانت رمز خطأ. - ولكن هذا النهج كان له عيب. بعد كل استدعاء دالة (!) كان عليك التحقق من الكود (الرقم) الذي أرجعته الدالة. أولاً، كان الأمر غير مريح: نادرًا ما يتم تنفيذ تعليمات برمجية لمعالجة الأخطاء، ولكن كان عليك دائمًا كتابتها. ثانيًا، غالبًا ما تُرجع الوظائف نفسها قيمًا مختلفة - فماذا تفعل بها؟ - نعم. هذا ما كنت سأطرحه. - ثم جاء المستقبل المشرق، حيث ظهرت الاستثناءات ومعالجة الأخطاء. وإليك كيف يعمل:
  1. عند حدوث خطأ، تقوم آلة Java الافتراضية بإنشاء كائن خاص - استثناء - يحتوي على كافة المعلومات حول الخطأ. للأخطاء المختلفة هناك استثناءات مختلفة.
  2. ثم يجبر هذا الاستثناء البرنامج على مقاطعة الوظيفة الحالية فورًا، والوظيفة التالية، حتى تخرج من الطريقة الرئيسية. وبعد ذلك ينتهي البرنامج. يطلق مطورو Java على هذه العملية اسم "استعادة مكدس الاستدعاءات".
- لكنك قلت أن البرنامج لن يخرج بالتأكيد. - هذا صحيح، لأن هناك طريقة للقبض على الاستثناء. متى وأينما أردت، يمكنك كتابة رمز خاص لالتقاط هذه الاستثناءات والقيام بشيء مهم. - للقيام بذلك، هناك محاولة بناء خاصة . انظر كيف يعمل: المستوى القديم 09 - 6- لماذا «بعد استدعاء الطريقة 1. لن يتم عرضها أبدًا» لن يتم عرضها على الشاشة؟ - أنا سعيد لأنك سألت عن ذلك. في السطر 25، هناك قسمة على صفر. وهذا يؤدي إلى خطأ – استثناء. أنشأ جهاز Java الظاهري الكائن ArithmeticException الذي يحتوي على معلومات الخطأ. هذا الكائن استثناء. - حدث استثناء داخل الطريقة Method1() . وأدى ذلك إلى الإنهاء الفوري لهذه الطريقة. قد يؤدي أيضًا إلى إنهاء الطريقة الرئيسية ، إذا لم يكن هناك كتلة محاولة الالتقاط . - في حالة حدوث استثناء داخل كتلة المحاولة، فسيتم اكتشافه في كتلة الالتقاط . لن يتم تنفيذ بقية التعليمات البرمجية الموجودة في محاولة الكتلة، وسيبدأ تنفيذ عملية التقاط الكتلة على الفور. - أنا لا أفهم تماما. - بمعنى آخر، يعمل هذا الكود على النحو التالي:
  1. في حالة حدوث استثناء داخل كتلة المحاولة ، لم يعد يتم تنفيذ التعليمات البرمجية الموجودة في هذه الكتلة، ولكن يبدأ تنفيذ التقاط الكتلة .
  2. إذا لم يحدث أي استثناء، فسيتم تنفيذ كتلة المحاولة حتى النهاية ، ولن يتم تنفيذ الالتقاط مطلقًا .
- مهم! - تخيل أننا بعد كل استدعاء للأسلوب نتحقق مما إذا كان الأسلوب المستدعى قد تم إنهاؤه من تلقاء نفسه أو بسبب الاستثناء. إذا كان هناك استثناء، يبدأ JVM في تنفيذ عملية التقاط الكتلة إذا كانت متاحة، ويلتقط الاستثناء. إذا لم يكن هناك كتلة التقاط، فسيقوم JVM بإنهاء الطريقة الحالية. ثم يبدأ نفس الفحص بالطريقة التي تسمى الطريقة الحالية. - الآن أعتقد أنني حصلت عليه. - هذا جيّد. - وما هو هذا الاستثناء داخل كتلة الصيد؟ - جميع الاستثناءات هي فئات موروثة من فئة الاستثناء. يمكننا التقاط أي منها عن طريق تحديد فئتها في كتلة الالتقاط ، أو جميعها مرة واحدة عن طريق تحديد استثناء فئة أصل مشترك. بعد ذلك، من المتغير e (يقوم هذا المتغير بتخزين مرجع كائن الاستثناء) يمكنك الحصول على كافة المعلومات الضرورية حول الخطأ. - عظيم! وماذا لو حدثت استثناءات مختلفة في طريقتي، فهل يمكنني التعامل معها بطرق مختلفة؟ - عليك أن. يمكنك القيام بذلك على النحو التالي: المستوى القديم 09 - 7- قد تحتوي كتلة المحاولة على كتل التقاط متعددة ، كل واحدة منها ستلتقط الاستثناءات من نوعها. - أمف. حسنا، لقد حصلت عليه نوعا ما. بالطبع، لن أكتب شيئًا كهذا بنفسي. ومع ذلك، لن أشعر بالخوف إذا التقيت بمثل هذا الرمز.

4 إلي، RuntimeException، رميات

المستوى القديم 09 - 8- قررت أن أطرح موضوعًا آخر اليوم. في Java، تنقسم جميع الاستثناءات إلى نوعين – خاضع للرقابة/محدد وغير متحكم فيه/غير محدد . يجب أن يتم اكتشاف الاستثناءات المحددة ، ويمكن اكتشافها دون تحديدها ولكن هذا غير مطلوب . - هل من الممكن طرح استثناءات في الكود عن قصد؟ - في التعليمات البرمجية الخاصة بك، يمكنك طرح الاستثناءات بنفسك. يمكنك حتى كتابة الاستثناءات الخاصة بك. لكننا سنتعمق في هذه الحفرة لاحقًا. الآن دعونا نتعلم كيفية التعامل مع الاستثناءات التي يطرحها جهاز Java الظاهري. - نعم. - إذا تم طرح (ظهور) استثناءات ClassNotFoundException و FileNotFoundException في إحدى الطرق، فيجب على المبرمج تحديدها في توقيع الطريقة (رأس الطريقة). يتم فحص هذه الاستثناءات . هذا ما يبدو عادةً: المستوى القديم 09 - 9- إذن، نكتب فقط الرميات وندرج الاستثناءات مفصولة بفواصل. يمين؟ هل هذا صحيح؟ - نعم. ولكن هناك شيء آخر مثير للاهتمام. لكي يتم تجميع المثال أدناه، يجب على الطريقة التي تستدعي الطريقة 1 () إما التقاط هذه الاستثناءات أو طرحها للأمام. إذا كنت تريد طرح الاستثناء المحدد للأمام، فستحتاج إلى تحديده في رأس الطريقة . - مرة أخرى، إذا كنت تريد في الطريقة الرئيسية استدعاء طريقة تحتوي في عبارة رأسها على FileNotFoundException،... فعليك القيام بأحد هذين الأمرين:
  1. للقبض على الاستثناءات FileNotFoundException،...
    سيتعين عليك تغليف الكود الذي تستدعي فيه طريقة خطيرة باستخدام كتلة محاولة الالتقاط
  2. عدم التقاط الاستثناءات FileNotFoundException، ...
سيتعين عليك إضافة هذه الاستثناءات إلى قائمة الرميات الخاصة بالطريقة الرئيسية الخاصة بك . - هل تعطيني مثالا؟ - انظر هنا: المستوى القديم 09 - 10- لن يتم تجميع هذا المثال، لأن الطريقة الرئيسية تستدعي الطريقة Method1()، والتي تطرح استثناءات يجب اكتشافها. - لتجميع المثال، تحتاج إلى إضافة معالجة الاستثناءات إلى الطريقة الرئيسية . يمكنك القيام بذلك بطريقتين: المستوى القديم 09 - 11- وهنا نلتقطه باستخدام حاول الالتقاط : المستوى القديم 09 - 12- أصبح الأمر أكثر وضوحًا، ولكن قليلًا جدًا. - انظر إلى المثال أدناه: المستوى القديم 09 - 13- لا يزال هناك استثناء - RuntimeException والفئات الموروثة منه. ليس من الضروري الإمساك بهم أو رميهم. هذه استثناءات لم يتم التحقق منها. تعتبر هذه الاستثناءات صعبة التنبؤ، لذلك يكاد يكون من المستحيل التنبؤ بحدوثها. يمكنك أن تفعل نفس الأشياء معهم، ولكن ليست هناك حاجة لتحديدها في throws .

5 ريشا، تدوير مكدس الاستدعاءات، وكيفية القيام بذلك في الاستثناءات

- أود أن أخبركم المزيد عن كيفية عمل الاستثناءات. يوضح المثال أدناه ما يلي: المستوى القديم 09 - 14- لا أفهم ذلك. - نعم. سأشرح ما يحدث. - في المثال الموجود على اليسار، نسمي عدة طرق بالترتيب التسلسلي. في الطريقة 2 () نقوم بإنشاء استثناء ورميه على وجه التحديد (لبدء خطأ). - المثال على اليمين يوضح ما يحدث. انظر إلى الطريقة 2 () . هذا هو ما يتحول إليه إنشاء الاستثناء: نقوم بإنشاء كائن من نوع RuntimeException ، ونخزنه في استثناء متغير خاص ونخرج من الطريقة على الفور - return . - في الطريقة 1 ، بعد استدعاء الطريقة 2 ، يتم التحقق مما إذا كان هناك استثناء أم لا؛ إذا كان هناك استثناء، فسيتم إنهاء الطريقة 1 على الفور. يتم إجراء هذا الفحص ضمنيًا بعد استدعاء كل طريقة (!) Java. - رائع! - بالضبط. - في العمود الموجود على اليمين في الطريقة الرئيسية ، كتبت ما يحدث عندما يتم اكتشاف استثناء بواسطة كتلة محاولة الالتقاط . إذا لم يكن هناك استثناء، يستمر تنفيذ التعليمات البرمجية تمامًا كما هو مخطط لها. إذا كان هناك استثناء من النوع المحدد في الصيد ، فإننا نتعامل معه. - وماذا يعني رمي ومثيل ؟ - انظر إلى السطر الأخير على اليسار لرمي RuntimeException (s) الجديد . بهذه الطريقة نقوم بإنشاء ورمي استثناء. هذا مجرد مثال. لن نفعل ذلك حتى الآن. - باستخدام الأمر « а exampleof B » في الجزء الأيمن نتحقق مما إذا كان الكائن a من النوع B. أي ما إذا كان الكائن المخزن في الاستثناء المتغير يحمل النوع RuntimeException . إنه تعبير منطقي. - حسنًا، أصبح الأمر أكثر وضوحًا بعض الشيء.

6 دييغو، مهمة التقاط الاستثناء

- انظر هنا! لم يكلّفك العم دييغو سوى القليل من المهام في عملية الصيد. أتمنى لك التوفيق. أعتقد أنك سوف تحتاج إليها. هيه. المستوى القديم 09 - 15- مهلا، أميغو! فيما يلي بعض مهام التقاط الاستثناءات المثيرة للاهتمام.
اصطياد المهام
1 1. استثناء عند العمل مع الأرقام
اكتشف الاستثناء الذي يحدث عند تشغيل الكود:
int a = 42 / 0;
عرض الاستثناء على الشاشة مع تحديد نوعه
2 2. استثناء عند العمل مع السلاسل
اكتشف الاستثناء الذي يحدث عند تشغيل الكود:
String s = null;
String m = s.toLowerCase();
عرض الاستثناء على الشاشة مع تحديد نوعه.
3 3. استثناء عند العمل مع المصفوفات
اكتشف الاستثناء الذي يحدث عند تشغيل الكود:
int[] m = new int[2];
م[8] = 5;
عرض الاستثناء على الشاشة مع تحديد نوعه.
4 4. استثناء عند العمل مع مجموعات القائمة
اكتشف الاستثناء الذي يحدث عند تشغيل التعليمات البرمجية:
ArrayList<String> list = new ArrayList<String>();
سلسلة ق = list.get(18);
عرض الاستثناء على الشاشة مع تحديد نوعه.
5 5. استثناء عند العمل مع مجموعات الخرائط
اكتشف الاستثناء الذي يحدث عند تشغيل التعليمات البرمجية:
HashMap<String, String> Map = new HashMap<String, String>(null);
Map.put(null, null);
Map.remove(null);
عرض الاستثناء على الشاشة مع تحديد نوعه.
- نصيحة: قم أولاً بكتابة برنامج، ثم انظر ما هو الاستثناء الذي يحدث، وبعد ذلك قم بتغيير الكود واكتشف هذا الاستثناء.

7 ريشة، كيف يعمل الصيد المتعدد

المستوى القديم 09 - 16- الآن، بعض المحاضرات الأكثر إثارة للاهتمام. أنا أحب التدريس كثيرا. - أريد أن أخبرك كيف يعمل الصيد المتعدد . في الواقع، الأمر بسيط للغاية: عند حدوث استثناء في كتلة المحاولة ، يتم نقل تنفيذ البرنامج إلى المصيد الأول . - إذا كان النوع المحدد بين قوسين في كتلة الالتقاط هو نفس نوع كائن الاستثناء، فسيبدأ تنفيذ التعليمات البرمجية داخل {}. وإلا فإننا نذهب إلى الصيد التالي . يتم تكرار الشيك هناك. - إذا لم يكن هناك المزيد من كتل الالتقاط ، ولكن لم يتم اكتشاف الاستثناء، فسيتم طرحه للأمام، وستتم مقاطعة الطريقة الحالية. - أرى. سيتم تنفيذ هذا الالتقاط، الذي يتطابق نوعه مع نوع الاستثناء. - نعم صحيح. في الواقع، الأمر أكثر تعقيدًا بعض الشيء: النقطة المهمة هي أنه يمكن وراثة الفئات من بعضها البعض. إذا كانت الفئة «بقرة» موروثة من الفئة «حيوان»، فإن كائن النوع «بقرة» قد يتم تخزينه ليس فقط في متغير من النوع «بقرة»، ولكن في متغير من النوع «حيوان» أيضًا . - وماذا في ذلك؟ - نظرًا لأن جميع الاستثناءات موروثة من الفئات Exception أو RuntimeException (والتي يتم توريثها أيضًا من Exception )، فقد يتم اكتشافها جميعًا باستخدام أوامر الصيد (Exception e) أو Catch (RuntimeException e) . - وماذا في ذلك؟ - هذا يعني أنه يمكنك أولاً اكتشاف أي استثناء باستخدام الأمر Catch(Exception e) . ثانيًا، ترتيب كتل الالتقاط مهم. أمثلة: - يتم اكتشاف الاستثناء الحسابي الناتج عن القسمة على 0 في عملية الصيد الثانية. المستوى القديم 09 - 17- في المثال أدناه، تم اكتشاف ArithmeticException في أول مشكلة ، لأن فئات جميع الاستثناءات موروثة من Exception. إذن، الاستثناء يلتقط أي استثناء . المستوى القديم 09 - 18- في المثال أدناه، لم يتم اكتشاف الاستثناء ArithmeticException ، ولكن تم طرحه إلى أسلوب الاستدعاء. المستوى القديم 09 - 19- حسنًا، أصبح الأمر أكثر وضوحًا الآن. هذه الاستثناءات ليست بهذه السهولة. - يبدو الأمر كذلك. في الواقع، إنها واحدة من أبسط الأشياء في Java. - أنا في شك هل أسعد أم أنزعج من ذلك ...

8 دييغو، مهام التقاط الاستثناءات المتعددة

- مهلا، أميغو! لقد سكرت بالأمس وقمت بتعقيد مهامك بشكل مبالغ فيه، لكن أتمنى ألا يكون هناك أي ضغينة من جانبك وسوف تحلها كلها؟ انها لمصلحتك. هنا:
مهام
1 1. الاستثناءات
هناك طريقة تطرح استثناءين موروثين من Exception ، والاستثناءين الآخرين موروثين من RuntimeException : NullPointerException ، و ArithmeticException ، وFileNotFoundException ، و URISyntaxException .

تحتاج إلى التقاط NullPointerException و FileNotFoundException ، ولكن لا تحتاج إلى التقاط ArithmeticException و URISyntaxException . كيف افعلها؟
2 2. اصطياد الاستثناءات
هناك ثلاثة استثناءات موروثة بالتسلسل من الاستثناء :
فئة Exception1 تمتد
فئة الاستثناء Exception2 تمتد Exception1
فئة Exception3 تمتد Exception2
هناك طريقة موصوفة على النحو التالي:
طريقة الفراغ الثابت العام 1 () تطرح Exception1، Exception2، Exception3

اكتب صيدًا كتلة للقبض على كافة Exception1 و Exception2 و Exception3
3 3. التقاط الاستثناءات الانتقائية
1. تعرف على الاستثناءات التي يتم طرحها بواسطة الطريقة BEAN.methodThrowExceptions .
2. يجب أن تستدعي الطريقة processExceptions() الطريقة BEAN.methodThrowExceptions وتتعامل مع الاستثناءات:
2.1. في حالة حدوث استثناء FileSystemException ، قم بتسجيله عن طريق استدعاء الأسلوب BEAN.log ثم قم بالطرح للأمام
2.2. في حالة حدوث استثناء CharConversionException أو أي IOException آخر ، فما عليك سوى تسجيله عن طريق استدعاء الطريقة BEAN.log
3. أضف فئة/نوع الاستثناء الذي تقوم بإعادة توجيهه في 2.1. إلى توقيع الأسلوب processExceptions() .
4. تعامل مع الاستثناء المتبقي في الطريقة main() وقم بتسجيله. استخدم نصيحة Try..catch

:
إذا اكتشفت الاستثناء MyException ، الذي لم ترغب في اكتشافه، فيمكنك طرحه للأمام باستخدام الكود التالي:
Catch (MyException e) {
throw e;
}
4 4. التقاط الاستثناءات المحددة
قم بمعالجة جميع الاستثناءات المحددة في الطريقة processExceptions() .
يجب أن تعرض على الشاشة كل استثناء محدد حدث.
يمكنك استخدام كتلة واحدة فقط حاول .
5 5. التقاط الاستثناءات غير المحددة
قم بمعالجة كافة الاستثناءات التي لم يتم التحقق منها في الطريقة processExceptions() .
يجب أن تعرض على الشاشة تتبع المكدس لكل استثناء حدث باستخدام الأسلوب printStack() .
يمكنك استخدام كتلة واحدة فقط حاول .

9 أستاذ محاضرة عن الاستثناءات

- اليوم لدينا موضوع مثير للاهتمام للغاية - الاستثناءات. في ذلك الوقت، عندما كان العلماء والمبرمجون الشباب متحمسين للغاية لهذا الموضوع... - آسف، يجب أن أذهب إلى المختبر. وهنا ملاحظات المحاضرة. أعتقد أنك ستكتشف ذلك بنفسك. هنا: استثناءات Java (وثائق Oracle) معالجة الاستثناءات في Java (نقطة Java T) Java - معالجة الاستثناءات (نقطة البرامج التعليمية) معالجة استثناءات Java الأساسية

10 خوليو

- صديقي، ما رأيك في درس اليوم؟ هل لم يعمل دماغك البوزيتروني بعد؟ مهام دييغو كافية لإرهاق أي شخص. دعونا نحظى بلحظة من البيرة ونسترخي. هل مازلت واقفاً؟

11 الكابتن السناجب

- مرحبا أيها الجندي! - صباح الخير سيدي! - لدي بعض الأخبار الرائعة لك. إليك فحصًا سريعًا لتعزيز مهاراتك. افعل ذلك كل يوم، وسوف تعزز مهاراتك بسرعة كبيرة. تم تصميم المهام خصيصًا للقيام بها في Intellij IDEA.
مهام إضافية للقيام بها في Intellij Idea
1 1. القسمة على صفر
قم بإنشاء طريقة public static void DivisionByZero() ، حيث تحتاج إلى تقسيم أي رقم على صفر، وعرض نتيجة القسمة على الشاشة.
قم بلف استدعاء الأسلوب DivisionByZero() ‎ في محاولة..catch . اعرض على الشاشة تتبع مكدس الاستثناءات باستخدام الطريقة Exception.printStackTrace() .
2 2. العد التنازلي من 10 إلى 0
اكتب حلقة للعد التنازلي من 10 إلى 0. استخدم Thread.sleep(100) للتأخير؛
قم بتحويل مكالمة النوم إلى محاولة.. التقاط .
3 3. قم بلف الطريقة في محاولة .. التقاط
أرقام القراءة من لوحة المفاتيح. اكتب رمزًا لقراءة الأرقام من لوحة المفاتيح في طريقة منفصلة readData() .
قم بتغليف نص هذه الطريقة بالكامل (الكود بأكمله داخل طريقة readData() ‎، باستثناء الإعلان عن القائمة التي سيتم تخزين الأرقام فيها) في محاولة ..catch .

إذا أدخل المستخدم بعض النص بدلاً من إدخال رقم، فيجب على الطريقة التقاط الاستثناء وعرض جميع الأرقام التي تم إدخالها من قبل على الشاشة.
عرض الأرقام على الشاشة. يجب أن يكون كل رقم على سطر جديد. يجب أن يكون ترتيب الأرقام كما كان في الإدخال.
4 4. محول التاريخ
اقرأ من لوحة المفاتيح تاريخًا بتنسيق «18/08/2013»
اعرض على الشاشة ذلك التاريخ بصيغة «18 أغسطس 2013».
استخدم الكائنات Date و SimpleDateFormat .
5 5. حروف العلة والحروف الساكنة
اكتب برنامجًا يقرأ السطر من لوحة المفاتيح.
يجب أن يعرض البرنامج على الشاشة سلسلتين:
1) يجب أن تحتوي السلسلة الأولى على حروف متحركة
2) يجب أن تحتوي السلسلة الثانية على الحروف الساكنة وعلامات الترقيم من النص المدخل.
فصل الأحرف بمسافات.

مثال للإدخال:
توقف عن النظر واستمع
لإخراج المثال:
oooie
stplklstn
6 6. حكاية ذات الرداء الأحمر
1. هناك خمس فئات: ذات الرداء الأحمر، الجدة، باتي، الحطاب، الذئب.
2. يحتوي كل فصل على حقلين من نوع ArrayList : القتل والأكل.
3. تم بالفعل إنشاء الأشياء الضرورية (غطاء محرك السيارة، الجدة، ...).
4. اصنع العلاقة الصحيحة (من أكل ومن قتل من) لتحصل على منطق «ذات الرداء الأحمر».
7 7. انقل التعديلات الثابتة
انقل المعدلات الثابتة حتى يتم تجميع التعليمات البرمجية.
8 8. قائمة مصفوفات الأرقام
قم بإنشاء قائمة عناصرها عبارة عن مصفوفات أرقام. أضف إلى القائمة خمس مصفوفات كائنات بطول 5، 2، 4، 7، 0، على التوالي. املأ المصفوفات بأية بيانات واعرضها على الشاشة.
9 9. عشرة قطط
قم بإنشاء فئة Cat باستخدام حقل String name .
أنشئ قاموس Map<String, Cat> وأضف 10 قطط على النموذج «Name» - «Cat».
احصل من الخريطة على مجموعة من الأسماء واعرض المجموعة على الشاشة.
- تلك المهام كانت للخضر. لقد أضفت مهام إضافية ذات تعقيد أعلى. للبنادق العليا فقط.
مهام المكافأة
1 1. لا يتم تجميع البرنامج وتشغيله. اصلحه.
المهمة: يجب أن يقرأ البرنامج من لوحة المفاتيح اسمين للملفين وينسخ الملف الأول إلى الموقع المحدد بالاسم الثاني.
2 2. إضافة وظائف جديدة للبرنامج.
المهمة القديمة: يجب على البرنامج أن يقرأ من لوحة المفاتيح اسمين للملفين وأن ينسخ الملف الأول إلى الموقع المحدد بالاسم الثاني.
المهمة الجديدة: يجب على البرنامج أن يقرأ من لوحة المفاتيح اسمين للملفين وأن ينسخ الملف الأول إلى الموقع المحدد بالاسم الثاني.

إذا كان الملف (الذي سيتم نسخه) بالاسم المحدد غير موجود، فيجب أن يعرض البرنامج على الشاشة الرسالة «الملف غير موجود» ويحاول قراءة اسم الملف من وحدة التحكم مرة أخرى قبل قراءة اسم الملف الثاني (الوجهة).
3 3. تعلم وممارسة الخوارزمية.
اقرأ من لوحة المفاتيح قائمة الكلمات والأرقام. عرض الكلمات على الشاشة بترتيب تصاعدي والأرقام بترتيب تنازلي.

مثال الإدخال:
الكرز
1
الفول
3
التفاح
2
0
البطيخ

إخراج المثال:
التفاح
3
الفول
2
الكرز
1
0
البطيخ
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION