ידע מול כישורים

רמה ישנה 09 - 1המכללה לימדה אותנו שאין הבדל גדול בין תיאוריה לפרקטיקה. ובכן, אתה בוודאי מבין שזה לא אותו הדבר. אבל אתה לא רואה את ההבדל הליבה. ובכל זאת יש אחד. רוב האנשים שמים את סימן השוויון בין "אני יודע" ל"אני יכול". האם אתה? מה דעתך על כמה דוגמאות?
  1. אני יודע שעישון מזיק לי, אבל אני מעשן.
  2. אני יודע שמזון מהיר מזיק לי, אבל אני אוכל אותו.
  3. אני מכיר את חוקי התעבורה אבל אני לא יכול לנהוג.
  4. אני יודע שריצה טובה בשבילי אבל אני לא רץ בבוקר.
לעתים קרובות קורה שאנשים מתייחסים ל"אני יודע" בתור "אני יכול". זו דוגמה טובה לתקנות התעבורה. אם אדם מכיר את התקנות ויודע איך לנהוג, זה אומר שהוא יכול לנהוג? לא. מה אם הוא חושב שהוא יודע לנהוג? אז למה שהוא צריך מדריך - הוא כבר יודע הכל. כשאתה בטוח שאתה כבר יודע הכל כנראה שלא תלמד שום דבר חדש. ואם אתה בטוח שאתה יודע לעשות הכל, לא תלמד. מחשבה כזו אפילו לא תעבור בראשך. וזה אומר שתפספסו את כל ההזדמנויות הנפלאות ללמוד משהו. מכללה רגילה רק נותנת לך ידע; תצטרך לרכוש מיומנויות בעצמך. אבל מה אני שומע? עשית תרגול מלבד תיאוריה במכללה שלך? אוקיי, אם למדת בפקולטה לפיזיקה , צור מודל עבודה של מנוע קיטור עם יעילות של לפחות 20%. אני בטוח שאתה יודע איך לעשות את זה, אבל אתה לא באמת תוכל לעשות את זה, נכון? אתה כימאי ? הכינו אבקה ללא עשן. אתה יודע איך, אבל אתה לא יכול, הא? מתמטיקאי, אתה? חשב את המסלול של פגז ארטילריה. אל תשכח לקחת בחשבון את צורת הקליפה. נקודות מתמטיות לא עפות במציאות. ואין סוסים כדוריים. רמה ישנה 09 - 2ביולוגית? לבודד פניצילין. העובש הזה גדל על מלונים, אז אתה יודע. אתה יודע איך - נפלא! האם אתה יכול לעשות את זה? כַּלכָּלָן? ערכו תחזית של גידול מחירי הנפט. בוצע? ועכשיו הפוך את זה ל-$2,000 או $200,000 בשנה על סמך התחזית שלך. שיחקת פעם ב- FOREX? בשביל כסף אמיתי? או שאתה פשוט יודע מה זה? כלכלה עולמית? נֶהְדָר! איפה אני פותח חברת offshore? בהונג קונג, אירלנד או בארה"ב. למה? גם אם אתה יודע את זה, וזה ספק, אתה בקושי תוכל לעשות את זה, כי מעולם לא עשית את זה. אין לך אפילו שמץ של מושג איך לעשות את זה. אה, לא למדת את זה בקולג'? איזו זכות יש לי לתת לך משימות שאתה לא מוכן אליהן? כי אלו המשימות של החיים האמיתיים. זה תרגול IS , כל מה שלמדת במכללה הוא: סוסים כדוריים, תחרות מושלמת - שום דבר מזה לא קיים בחיים האמיתיים. אבל למה שכחתי לציין את מומחה השיווק ? מהי הדרך הטובה ביותר להוציא את 500 הדולרים שלי כדי שכמה שיותר אנשים ידעו על ההרצאות שלי? על פרסומת? האם אתה מודע לכך שלא רק הפרסום הקלאסי כבר מיושן, אלא גם הרעיון של USP (הצעת מכירה ייחודית), שאני בטוח שלימדו אותך בקולג' בתור תרופת פלא כמעט ייחודית. תשכח שאתה יודע משהו. שאל את עצמך - מה אני יכול לעשות? שימושי, זאת אומרת? משהו שאנשים ישלמו כסף עבורו? כסף טוב, זאת אומרת? אז חברים, בואו להביע תודה על קורס נפלא כמו CodeGym. בזכותו לא רק תדעו לתכנת, אלא גם תוכלו לעשות זאת. אתה גם תוכל למצוא עבודה ולהרוויח כסף טוב בעוד כמה שנים. אני מקווה שהכסף הזה יספיק כדי לחיות נחמד ונעים. אני אגיד את זה שוב, כדי שתזכור: זה לא משנה מה אתה יודע. הדבר היחיד שחשוב הוא אילו מיומנויות שימושיות יש לך, אלה שאנשים היו להוטים לשלם לך. ככל שתבין זאת מוקדם יותר, כך ייטב.

הגעת לרמה חדשה

רמה 9

רמה ישנה 09 - 3

1 רישה, עקבות מחסנית

רמה ישנה 09 - 4- היי! היום אני אגיד לך מה זה מעקב מחסנית. אבל קודם תן לי להסביר לך מהי הערימה. - דמיינו ערימת ניירות - משימות לפקיד מסוים. ניתן לשים מטלה חדשה בראש הערימה, והוא ייקח מטלה מהחלק העליון של הערימה. לפיכך, מטלות יבוצעו לא על כל הקודם זוכה. בכל פעם שהפקיד לוקח את המשימה שמגיעה אחרונה. מבנה כזה של איסוף נקרא מחסנית . - ב-Java, יש אוסף מיוחד - Stack. לאוסף הזה יש שיטות "הוסף אלמנט" ו-"קח (קבל/קח) אלמנט". כפי שאתה כבר יודע, האלמנט האחרון שנוסף יילקח ראשון. - הממ. זה לא קשה, אני מניח. - בסדר גמור. אז תן לי להסביר מה זה מעקב מחסנית . - תארו לעצמכם שבפונקציה ג'אווה А קוראת לפונקציה B , והאחרונה קוראת לפונקציה C , שבתורה קוראת לפונקציה D . לכן, כדי לצאת מפונקציה B , תחילה עליך לצאת מפונקציה C , וכדי לעשות זאת עליך לצאת מפונקציה D. זה מאוד דומה לערימה. - ומה הדמיון? - בערימה, כדי להגיע למטלה מסוימת, צריך גם להשלים את כל המטלות שהעלו. - ובכן, זו די אנלוגיה, אבל אני לא בטוח אם אני מבין הכל נכון. - תסתכל כאן. ב-Java מחסנית היא קבוצה של אלמנטים. זה כמו גיליונות נייר בערימה. כדי לקחת את השלישי מלמעלה, אתה חייב לקחת את הגיליון השני, אבל לפני זה אתה צריך לקחת את הראשון. אתה תמיד יכול לשים ולקחת סדינים, אבל אתה יכול לשים אותם רק מלמעלה ולקחת רק מלמעלה. אותו הדבר חל על קריאת הפונקציה. פונקציה А קוראת לפונקציה B , האחרונה קוראת לפונקציה C. כדי לצאת מ- А , תחילה עליך לצאת מ- B , וכדי לעשות זאת יש לצאת מ- C. - חכה דקה. אם הבנתי נכון, כל הערימה מתבררת ב"אפשר לקחת רק את הגיליון האחרון שהונח על הערימה" ו"ראשית, הפונקציה האחרונה שנקראה צריכה לצאת". האמנם? - כן. אז, רצף קריאות הפונקציות הוא "מחסנית קריאת הפונקציות", או פשוט "מחסנית קריאות". יש לסיים תחילה את הפונקציה שנקראת last. בואו נסתכל על הדוגמה: רמה ישנה 09 - 5- בסדר. הכל ברור עם קריאת הפונקציה, אני מניח. אבל מה זה StackTraceElement ? - מכונה וירטואלית Java רושם את כל קריאות הפונקציה. למטרה זו יש לו אוסף מיוחד - מחסנית. כאשר פונקציה אחת קוראת לאחרת, JVM מציבה אלמנט חדש של StackTraceElementלתוך המחסנית הזו. כאשר הפונקציה מסתיימת, האלמנט נמחק מהמחסנית. לפיכך, מחסנית זו תמיד מאחסנת מידע עדכני על המצב הנוכחי של "מחסנית קריאת הפונקציות". - כל StackTraceElement מכיל מידע על השיטה הנקראת. אז אתה יכול לקבל את השם של שיטה זו באמצעות getMethodName . - הדוגמה שלמעלה מראה זאת:
  1. קבל את "מחסנית השיחות":
  2. חזור על המערך באמצעות הלולאה for-each . אני מקווה שלא שכחת את זה.
  3. הדפס שמות שיטות ל- System.out .
- דבר מעניין, וכנראה קל. תודה לך, רישה!

2 דייגו, תצוגת משימה על ערימה

היי, אמיגו! הנה משימה קטנה להציג למסך עקבות מחסנית.
משימות
1 כל שיטה צריכה להחזיר את ה-StackTrace שלה
לכתוב חמש שיטות שקוראות אחת לשנייה. כל שיטה צריכה להחזיר את StackTrace שלה.
2 StackTrace שוב
כתוב חמש שיטות שקוראות זו לזו. כל שיטה צריכה להחזיר את שם שיטת המתקשר שלה. אתה יכול להשיג את שיטת המתקשר באמצעות StackTrace.
3 השיטה צריכה להחזיר את מספר השורה של הקוד ששיטה זו נקראה
מכתוב חמש שיטות שקוראות זו לזו. כל שיטה צריכה להחזיר את מספר השורה של הקוד שממנו נקראה השיטה הזו. השתמש בפונקציה element.getLineNumber() .
4 מעקב מחסנית של 10 שיחות
כתוב קוד כדי לקבל מעקב מחסנית של 10 שיחות.
5 השיטה צריכה להחזיר תוצאה - עומק עקבות המחסנית שלה
כתוב שיטה שמציגה ומחזירה את עומק עקבות הערימה שלה. עומק עקבות מחסנית הוא מספר השיטות שלה (מספר האלמנטים ברשימה).

3 אלי, שגיאות וחריגים

היי, אמיגו! היום יש לנו שיעור מאוד מעניין. אני אספר לך על חריגים. חריגה היא מנגנון מיוחד לשליטה על שגיאות בתוכנית. הנה כמה דוגמאות לשגיאות שעלולות להתרחש בתוכנית:
  1. התוכנית מנסה לכתוב קובץ לדיסק המלא.
  2. התוכנית מנסה לקרוא למתודה של משתנה המאחסנת את הפניה null.
  3. התוכנית מנסה לחלק מספר ב-0.
פעולות אלו גורמות לשגיאה. בדרך כלל, זה מוביל לסגירה של תוכנית - אין טעם להמשיך ולהפעיל את הקוד. - למה? - האם יש טעם לסובב את ההגה כשהמכונית נופלת מהצוק? - אתה מתכוון שהתוכנית צריכה להסתיים? - כן. ככה זה היה קודם. כל שגיאה הובילה לסיום תוכנית. - זו החלטה חכמה מאוד. - לא עדיף לנסות לעבוד על? - כן. הקלדת טקסט ענק ב-MS Word, שמרת אותו, הוא לא נשמר, אבל התוכנה אומרת לך שהכל בסדר. ואתה ממשיך להקליד. טיפשי, לא? - כן. - ואז מתכנתים העלו מהלך מעניין: כל פונקציה החזירה את סטטוס העבודה שלה. 0 פירושו שהפונקציה עבדה כמו שהיא אמורה לפעול, כל ערך אחר - שהייתה שגיאה : הערך הזה היה קוד שגיאה. - אבל לגישה הזו היה חסרון. לאחר כל (!) קריאת פונקציה היית צריך לבדוק את הקוד (מספר) שהפונקציה מחזירה. ראשית, זה היה לא נוח: הקוד לטיפול בשגיאות הופעל רק לעתים רחוקות, אבל תמיד היה עליך לכתוב אותו. שנית, הפונקציות עצמן לרוב מחזירות ערכים שונים - מה לעשות איתם? - כן. זה מה שהתכוונתי לשאול. - ואז הגיע עתיד מזהיר - חריגים וטיפול בשגיאות הופיעו. ככה זה עובד:
  1. כאשר מתרחשת שגיאה, המכונה הווירטואלית של Java יוצרת אובייקט מיוחד - חריג - המכיל את כל המידע על השגיאה. לשגיאות שונות יש חריגים שונים.
  2. ואז חריג זה מאלץ את התוכנית להפסיק את הפונקציה הנוכחית באופן מיידי, ואת הפונקציה הבאה, עד שהיא יוצאת מהשיטה הראשית. לאחר מכן התוכנית מסתיימת. מפתחי Java קוראים לתהליך זה "מגלגל אחורה את מחסנית השיחות".
- אבל אמרת שהתוכנית לא הולכת לצאת בוודאות. - נכון, כי יש דרך לתפוס את החריג. בכל פעם ובכל מקום שאתה צריך, אתה יכול לכתוב קוד מיוחד כדי לתפוס את החריגים האלה ולעשות משהו חשוב. - כדי לעשות זאת, יש ניסיון לתפוס בנייה מיוחד . תראה איך זה עובד: רמה ישנה 09 - 6- למה «אחרי שיטה 1 התקשרות. לעולם לא יוצג» לא יוצג למסך? אני שמח ששאלת על זה. בשורה 25 יש חלוקה באפס. זה מוביל לשגיאה - חריג. מכונה וירטואלית Java יצרה את האובייקט ArithmeticException המכיל את מידע השגיאה. חפץ זה הוא חריג. - התרחש חריג בתוך השיטה method1() . זה הביא לסיום מיידי של השיטה. זה גם יוביל לסיום של השיטה main , אם לא היה חסימת try-catch . - אם מתרחש חריג בתוך בלוק הנסיון, הוא ייתפס בבלוק ה- catch . שאר הקוד ב-block try לא יבוצע, ביצוע ה-block catch יתחיל מיד. - אני לא כל כך מבין. - במילים אחרות, הקוד הזה עובד כך:
  1. אם מתרחש חריג בתוך בלוק try , הקוד בבלוק זה כבר לא מבוצע, אבל הביצוע של ה- catch block מתחיל.
  2. אם לא התרחש חריג, חסימת ה-try מבוצעת עד הסוף , וה- catch לעולם לא מבוצע .
- אהמ! - תארו לעצמכם שאחרי כל קריאה למתודה אנחנו בודקים אם נקרא שיטה הסתיימה מעצמה או עקב חריגה. אם היה חריג, JVM מתחיל לבצע את ה-block catch אם הוא זמין, ותופס חריגה. אם אין בלוק catch, JVM מפסיק את השיטה הנוכחית. ואז אותו בדיקה מתחיל בשיטה שקראה לשיטה הנוכחית. עכשיו אני חושב שהבנתי. - זה בסדר. - ומה זה החריג הזה בתוך בלוק התפיסה? - כל החריגים הם מחלקות שהועברו בירושה מהמחלקה Exception. אנו יכולים לתפוס כל אחד מהם על ידי ציון המחלקה שלו בבלוק התפיסה , או את כולם בבת אחת על ידי ציון מחלקת אב משותפת Exception. לאחר מכן, מהמשתנה e (משתנה זה מאחסן את ההפניה של אובייקט חריג) אתה יכול לקבל את כל המידע הדרוש על השגיאה. - גדול! ומה אם בשיטה שלי מתרחשים חריגים שונים, האם אוכל לטפל בהם בדרכים שונות? - אתה חייב. אתה יכול לעשות את זה כך: רמה ישנה 09 - 7- בלוק הנסי עשוי להכיל מספר בלוקים של תפיסה , שכל אחד מהם יתפוס חריגים מסוגו. - אמף. טוב, די הבנתי. כמובן, אני לא אכתוב דבר כזה בעצמי. עם זאת, אני לא אפחד אם אפגוש קוד כזה.

4 Elly, RuntimeException, זורק

רמה ישנה 09 - 8- החלטתי להעלות עוד נושא היום. ב-Java, כל החריגים מחולקים לשני סוגים - מבוקרים/מבוקרים ובלתי מבוקרים/לא מסומנים . יש לתפוס חריגים מסומנים, ניתן לתפוס ללא סימון אבל זה לא נדרש . - האם אפשר לזרוק חריגים בקוד בכוונה? - בקוד שלך, אתה יכול לזרוק חריגים בעצמך. אתה יכול אפילו לכתוב חריגים משלך. אבל נעמיק בבור הזה מאוחר יותר. כעת נלמד כיצד לעבוד עם החריגים שנזרקו על ידי המכונה הוירטואלית של Java. - בסדר. - אם חריגים ClassNotFoundException ו- FileNotFoundException נזרקים (מופיעים) בשיטה, המתכנת צריך לציין אותם בחתימה של מתודה (כותרת שיטה). חריגים כאלה נבדקים. ככה זה נראה בדרך כלל: רמה ישנה 09 - 9- אז אנחנו פשוט כותבים זריקות ומפרטים חריגים מופרדים בפסיקים. ימין? האמנם? - כן. אבל יש עוד דבר מעניין. כדי להרכיב את הדוגמה למטה, השיטה שקוראת ל- method1() צריכה לתפוס את החריגים האלה או לזרוק אותם קדימה. אם אתה רוצה לזרוק חריג מסומן קדימה, עליך לציין זאת בכותרת של השיטה . - שוב, אם בשיטה הראשית , אתה רוצה לקרוא למתודה שביטוי הכותרת שלה זורק FileNotFoundException, ... אז אתה צריך לעשות אחד משני הדברים הבאים:
  1. כדי לתפוס חריגים FileNotFoundException, ...
    תצטרך לעטוף את הקוד שבו אתה קורא לשיטה מסוכנת עם בלוק try-catch
  2. לא לתפוס חריגים FileNotFoundException, …
תצטרך להוסיף את החריגים האלה לרשימת ההשלכות של השיטה הראשית שלך . - תיתן לי דוגמה? - תראה כאן: רמה ישנה 09 - 10- דוגמה זו לא תקומפל, כי השיטה main קוראת למתודה method1(), שזורקת חריגים שחייבים להיתפס. - כדי להרכיב את הדוגמה, עליך להוסיף טיפול בחריגים לשיטה main . אתה יכול לעשות זאת בשתי דרכים: רמה ישנה 09 - 11- וכאן אנו תופסים את זה באמצעות try-catch : רמה ישנה 09 - 12- זה הולך ומתבהר, אבל מעט מאוד. - הסתכל בדוגמה למטה: רמה ישנה 09 - 13- בכל זאת יש חריג - RuntimeException ומחלקות שעברו ממנו. אין צורך לתפוס או לזרוק אותם. אלו הם חריגים לא מסומנים. חריגים אלו נחשבים קשים לניבוי, כך שכמעט בלתי אפשרי לחזות את התרחשותם. אתה יכול לעשות איתם את אותם דברים, אבל אין צורך לציין אותם בהשלכות .

5 רישה, גלגול ערימת השיחות, איך לעשות זאת בחריגים

- אני רוצה לספר לך קצת יותר על אופן הפעולה של חריגים. הדוגמה שלהלן מסבירה כי: רמה ישנה 09 - 14- אני לא מבין את זה. - בסדר. אני אסביר מה קורה. - בדוגמה משמאל אנו קוראים למספר שיטות בסדר שרשרת. ב- method2() אנו יוצרים וזורקים באופן ספציפי חריג (כדי ליזום שגיאה). - הדוגמה מימין מראה מה קורה. תסתכל על method2() . לזה הופכת יצירת חריג: אנחנו יוצרים אובייקט מסוג RuntimeException , מאחסנים אותו בחריג משתנה מיוחד ומיד יוצאים מהשיטה – return . - בשיטה1 , לאחר הקריאה של מתודה2 יש בדיקה, אם יש חריג או לא; אם יש חריג, שיטה1 מסתיימת מיד. בדיקה זו מתבצעת באופן מרומז לאחר קריאה לכל (!) שיטת Java. - וואו! - בדיוק. - בעמודה מימין בשיטה הראשית כתבתי מה קורה כאשר חריג נתפס על ידי בלוק ה- try-catch . אם לא היה חריג, הקוד ממשיך לפעול בדיוק כמתוכנן. אם היה חריג מהסוג שצוין ב- catch , אז אנחנו מטפלים בזה. - ומה המשמעות של זריקה ומופע של ? - תסתכל על השורה האחרונה בצד שמאל זרוק חדש RuntimeException(s) . בדרך זו אנו יוצרים וזורקים חריג. זו רק דוגמה. אנחנו לא נעשה את זה עד עכשיו. - באמצעות הפקודה « а מופע של B » בבלוק הימני אנו בודקים האם לאובייקט a יש את הסוג B . כלומר, אם לאובייקט המאוחסן בחריג המשתנה, יש את הסוג RuntimeException . זה ביטוי הגיוני. - ובכן, זה נהיה קצת יותר ברור.

6 דייגו, משימה לתפוס חריג

- תסתכל כאן! הדוד דייגו הביא מעט משימות לתפוס עבורך. מאחל לך בהצלחה. אני חושב שאתה תצטרך את זה. אהה. רמה ישנה 09 - 15היי, אמיגו! הנה כמה משימות תפיסה חריגות מעניינות.
משימות לתפוס
1 1. חריגה כאשר פועלים עם מספרים
תפסו את החריג שמתרחש בעת הפעלת הקוד:
int a = 42 / 0;
הצג את החריג למסך, ציין את סוגו
2 2. חריגה בהפעלה עם מחרוזות
תפוס את החריג שמתרחש בעת הפעלת הקוד:
String s = null;
מחרוזת m = s.toLowerCase();
הצג את החריג למסך, ציין את סוגו.
3 3. חריגה בהפעלה עם מערכים
תפוס את החריג שמתרחש בעת הפעלת הקוד:
int[] m = new int[2];
m[8] = 5;
הצג את החריג למסך, ציין את סוגו.
4 4. חריגה כאשר פועלים עם אוספי List
תפסו את החריג שמתרחש בעת הפעלת הקוד:
ArrayList<String> list = new ArrayList<String>();
String s = list.get(18);
הצג את החריג למסך, ציין את סוגו.
5 5. חריגה כאשר פועלים עם אוספי מפות
תפסו את החריג שמתרחש בעת הפעלת הקוד:
HashMap<String, String> map = new HashMap<String, String>(null);
map.put(null, null);
map.remove(null);
הצג את החריג למסך, ציין את סוגו.
- טיפ: תחילה כתוב תוכנית, ואז ראה איזה חריג מתרחש ואחרי זה שנה את הקוד ותפוס את החריג הזה.

7 רישא, איך עובד תפיסה מרובה

רמה ישנה 09 - 16- עכשיו, עוד כמה הרצאות מעניינות. אני כל כך אוהב ללמד. - אני רוצה לספר לך איך עובד מלכוד מרובה . למעשה זה מאוד פשוט: כאשר מתרחש חריג ב-block try , ביצוע התוכנית מועבר ל- catch הראשון . - אם הסוג שצוין בסוגריים של ה-block catch זהה לסוג ה-exception-object, אז ביצוע הקוד מתחיל בתוך ה-{}. אחרת נעבור לתפיסה הבאה . הבדיקה חוזרת שם. - אם אין יותר בלוקים לתפוס , אבל החריג לא נתפס, הוא נזרק קדימה, והשיטה הנוכחית נקטעת. - אני רואה. הקאץ' הזה יבוצע, שסוגו תואם את סוג החריגה. - כן נכון. למעשה, זה קצת יותר מסובך: הנקודה היא שהשיעורים יכולים לעבור בירושה אחד מהשני. אם המחלקה «פרה» עוברת בירושה מהמחלקה «חיה», ניתן לאחסן את האובייקט מסוג «פרה» לא רק במשתנה מסוג «פרה», אלא גם במשתנה מסוג «חיה» . - אז מה? - מכיוון שכל החריגים עוברים בירושה ממחלקות Exception או RuntimeException (שהועברו גם בירושה מ- Exception ), ניתן לתפוס את כולם באמצעות פקודות catch (Exception e) או catch (RuntimeException e) . - אז מה? - זה אומר, ראשית, אתה יכול לתפוס כל חריג באמצעות הפקודה catch(Exception e) . שנית, הסדר של בלוקי התפיסה כן משנה. דוגמאות: - ArithmeticException הנובע מחילוק ב-0 נתפס בתפיסה השנייה. רמה ישנה 09 - 17- בדוגמה למטה, ArithmeticException נתפס ב- catch הראשון , מכיוון שמחלקות של כל החריגים עוברות בירושה מ-Exception. אז, Exception תופס כל חריג . רמה ישנה 09 - 18- בדוגמה למטה, החריג ArithmeticException לא נתפס, אלא נזרק קדימה לשיטת הקריאה. רמה ישנה 09 - 19- ובכן, זה הולך ומתבהר עכשיו. חריגים אלה אינם כל כך קלים. - זה רק נראה כך. למעשה, זה אחד הדברים הפשוטים ביותר בג'אווה. - אני בספק אם להיות מרוצה או לכעוס מזה...

8 דייגו, משימות תפיסה חריגות מרובות

היי, אמיגו! אתמול השתכרתי וסיבכתי את המשימות שלך, אבל אני מקווה שאין רגשות קשים מצידך ותפתור את כולן? זה לטובתך. כאן:
משימות
1 1. חריגים
יש שיטה שזורקת שני חריגים שהועברו בירושה מ- Exception , ואת השניים האחרים בירושה מ- RuntimeException : NullPointerException , ArithmeticException , FileNotFoundException ו- URISyntaxException .

אתה צריך לתפוס את NullPointerException ו- FileNotFoundException , אבל לא לתפוס את ArithmeticException ו- URISyntaxException . איך לעשות את זה?
2 2. תפיסת חריגים
ישנם שלושה חריגים שהועברו ברצף מ- Exception :
class Exception1 מרחיב Exception
class Exception2 מרחיב Exception1
class Exception3 מרחיב Exception2
יש שיטה, המתוארת כך:
public static void method1() זורק Exception1, Exception2, Exception3

כתוב מלכוד חסום כדי לתפוס את כל שלושת החריג1 , החריג2 והחריג 3
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 (תיעוד אורקל) טיפול בחריגים ב-Java (נקודת Java T) Java - טיפול בחריגים (נקודת הדרכה) טיפול בסיסי בחריגים ב-Java

10 חוליו

- אמיגו, מה אתה חושב על השיעור של היום? האם המוח הפוזיטרוני שלך עדיין לא הסתדר? המשימות של דייגו מספיקות כדי לשחוק כל אחד. בואו נשתה רגע בירה ונרגע. אתה עדיין עומד?

11 קפטן סנאים

– שלום חייל! - בוקר טוב אדוני! - יש לי חדשות מדהימות בשבילך. הנה בדיקה מהירה כדי לחזק את הכישורים שלך. עשה זאת כל יום, ותשפר את הכישורים שלך ממש מהר. משימות תוכננו במיוחד לביצוע ב-Intellij IDEA.
משימות נוספות לעשות ב-Intellij Idea
1 1. חלוקה באפס
צור שיטה public static void divisionByZero() , שבה אתה צריך לחלק כל מספר באפס, ולהציג למסך את תוצאת החלוקה.
עטפו את הקריאה לשיטת divisionByZero() לתוך try..catch . הצג למסך את מחסנית החריגה באמצעות השיטה exception.printStackTrace() .
2 2. ספירה לאחור מ-10 ל-0
כתוב לולאה לספירה לאחור מ-10 ל-0. השתמש ב-Thread.sleep(100) כדי לבצע השהייה;
עטפו את שיחת השינה בניסיון..תפוס .
3 3. עטפו שיטה לתוך try..catch
קרא מספרים מהמקלדת. כתוב קוד לקריאת מספרים מהמקלדת לתוך שיטה נפרדת readData() .
עטפו את כל הגוף של שיטה זו (כל הקוד בתוך שיטת readData() , למעט ההכרזה של הרשימה שבה יאוחסנו המספרים) ב- try..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. Move static modifies
העבר מתקנים סטטיים כך שהקוד יתחבר.
8 8. רשימת מערכי מספרים
צור רשימה שהרכיבים שלה הם מערכי מספרים. הוסף לרשימה חמישה מערכי אובייקטים באורך 5, 2, 4, 7, 0, בהתאמה. מלא מערכים בנתונים כלשהם והצג אותם על המסך.
9 9. עשרה חתולים
צור חתול בכיתה עם שם מחרוזת שדה .
צור מפת מילון <String, Cat> , הוסף 10 חתולים בדגם «שם» - «Cat».
קבל מהמפה קבוצת שמות והצג את הסט למסך.
המשימות האלה היו לירוקים. הוספתי משימות בונוס בעלות מורכבות גבוהה יותר. עבור רובים מובילים בלבד.
משימות בונוס
1 1. התוכנית אינה קומפילציה ופועלת. תתקן את זה.
משימה: על התוכנית לקרוא מהמקלדת שני שמות קבצים ולהעתיק את הקובץ הראשון למיקום שצוין בשם השני.
2 2. הוסף פונקציונליות חדשה לתוכנית.
משימה ישנה: התוכנית צריכה לקרוא מהמקלדת שני שמות קבצים ולהעתיק את הקובץ הראשון למיקום שצוין בשם השני.
משימה חדשה: התוכנית צריכה לקרוא מהמקלדת שני שמות קבצים ולהעתיק את הקובץ הראשון למיקום שצוין בשם השני.

אם הקובץ (שעומד להיות מועתק) עם השם שצוין לא קיים, התוכנה צריכה להציג למסך את ההודעה «קובץ לא קיים» ולנסות לקרוא את שם הקובץ מהמסוף פעם נוספת לפני קריאת הקובץ שם הקובץ השני (יעד).
3 3. לימוד ותרגול אלגוריתם.
קרא מהמקלדת את רשימת המילים והמספרים. הצג למסך מילים בסדר עולה ואת המספרים בסדר יורד.

קלט לדוגמה:
דובדבן
1
שעועית
3
תפוח
2
0
אבטיח

פלט דוגמה:
תפוח
3
שעועית
2
דובדבן
1
0
אבטיח