מתודות סטטיות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 16 מתוך 87.
בדומה למשתנים סטטיים, ששייכים למחלקה ולא למופעים, גם מתודות סטטיות שייכות למחלקה עצמה. אפשר לקרוא להן בלי ליצור אובייקט.
הכרז על מתודה סטטית על ידי הוספת מילת המפתח static:
public class MathHelper {
public static int add(int a, int b) {
return a + b;
}
public static int multiply(int a, int b) {
return a * b;
}
}
// קריאה ללא יצירת אובייקט
int sum = MathHelper.add(5, 3); // 8
int product = MathHelper.multiply(4, 2); // 8למתודות סטטיות יש מגבלה חשובה אחת: הן אינן יכולות לגשת ישירות למשתני מופע או למתודות מופע. מכיוון שמתודות סטטיות קיימות ללא אובייקט, אין הפניה ל־this שאפשר להשתמש בה.
public class Counter {
private int count; // משתנה מופע
private static int total; // משתנה סטטי
public static void incrementTotal() {
total++; // תקין - גישה למשתנה סטטי
// count++; // שגיאה! אי אפשר לגשת למשתנה מופע
}
}מתודות סטטיות אידיאליות לפעולות שירות שאינן תלויות במצב האובייקט — חשבו על מתודות כמו Math.sqrt() או Integer.parseInt(). הן מספקות פונקציונליות שמתאימה לרמת המחלקה ולא לאובייקטים בודדים.
אתגר
קלבואו נבנה מחלקת שירות StringUtils שמספקת שיטות מועילות לעיבוד מחרוזות בלי צורך ליצור אובייקטים כלשהם — מושלם להדגמת מתודות סטטיות!
תיצרו שני קבצים כדי לארגן את הקוד שלכם:
StringUtils.java: צרו מחלקת שירות עם מתודות סטטיות שמבצעות פעולות נפוצות על מחרוזות:- מתודה סטטית
countVowels(String text)שמחזירה את מספר התנועות (a, e, i, o, u — באותיות גדולות וקטנות) במחרוזת הנתונה - מתודה סטטית
reverse(String text)שמחזירה את המחרוזת בסדר הפוך - מתודה סטטית
isPalindrome(String text)שמחזירהtrueאם המחרוזת נקראת באותה צורה מההתחלה לסוף ומהסוף להתחלה (ללא תלות ברישיות), ו-falseאחרת
- מתודה סטטית
Main.java: השתמשו במחלקת השירות שלכם כדי לעבד מחרוזת. תקבלו קלט אחד: מחרוזת טקסט. קראו לכל מתודה סטטית ישירות דרך שם המחלקה והדפיסו שלוש שורות:Vowels: [count]Reversed: [reversed string]Palindrome: trueאוPalindrome: false
תקבלו קלט אחד: מחרוזת טקסט לניתוח.
זכרו שמתודות סטטיות נקראות באמצעות שם המחלקה (כמו StringUtils.countVowels(text)) ולאחר מכן אין צורך ליצור מופע. כך מחלקות שירות נוחות לביצוע פעולות שלא צריכות לשמור על מצב כלשהו בין קריאה לקריאה.
נסו בעצמכם
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine();
// TODO: השתמשו במתודות הסטטיות של StringUtils כדי לנתח את הטקסט
// קראו ל־StringUtils.countVowels(text) כדי לקבל את מספר התנועות
// קראו ל־StringUtils.reverse(text) כדי לקבל את המחרוזת בסדר הפוך
// קראו ל־StringUtils.isPalindrome(text) כדי לבדוק אם הטקסט הוא פלינדרום
// TODO: הדפיסו את התוצאות בפורמט הבא:
// תנועות: [מספר]
// בסדר הפוך: [מחרוזת בסדר הפוך]
// Palindrome: true/false
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותשדות (מאפיינים)מתודת הבנאיהעמסת בנאיםחזרה – מחשבון פשוט4ירושה
ירושה בסיסית (extends)מילת המפתח superדריסת מתודות (@Override)שרשור בנאיםהמחלקה Objectירושה יחידה ורב־רמתיתלמה אין ירושה מרובה של מחלקותסיכום – היררכיית עובדים7מתודות מיוחדות ומחלקת Object
מתודת toString()equals() ו-hashCode()מתודת clone()compareTo() ו-Comparableהממשק Comparatorסיכום – מיון מותאם אישית2מצייני גישה ואנקפסולציה
סקירה של רמות הגישהמתודות Getter ו-Setterהסתרת מידעמילת המפתח finalסיכום – מנהל חשבון בנק5פולימורפיזם
יסודות העמסת מתודותדריסת מתודות (בזמן ריצה)המרה כלפי מעלה וכלפי מטההאופרטור instanceofמחלקות ומתודות מופשטותסיכום – מחשבון צורות8מושגי OOP מתקדמים
הרכבה מול ירושהאגרגציה מול הרכבהמחלקות פנימיות, מקוננות ואנונימיותEnums ומתודות של EnumRecords (Java 16+)מחלקות חתומות (Java 17+)3מאפייני מחלקה וחברים סטטיים
משתני מופע לעומת משתנים סטטייםמתודות סטטיותבלוקים סטטייםקבועים (static final)סיכום — מונה ומחלקת עזר6ממשקים ומחלקות מופשטות
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםמתודות ברירת מחדל וסטטיות בממשקמחלקות מופשטות לעומת ממשקיםממשקים פונקציונלייםסיכום – מערכת תשלומיםתרגלו בעצמכם: קומפיילר Java אונליין