קבועים (static final)
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 18 מתוך 87.
שילוב של static ו־final יוצר קבוע — ערך ששייך למחלקה ולעולם לא יכול להשתנות. זו הדרך המקובלת להגדיר קבועים ב־Java.
public class GameSettings {
public static final int MAX_PLAYERS = 4;
public static final double GRAVITY = 9.81;
public static final String GAME_TITLE = "Space Adventure";
}לפי המוסכמה, שמות של קבועים נכתבים ב־UPPER_SNAKE_CASE כדי להבדיל ביניהם לבין משתנים רגילים. מכיוון שהם גם static וגם final, ניגשים אליהם דרך שם המחלקה, והערכים שלהם מובטחים לא להשתנות לעולם:
System.out.println(GameSettings.MAX_PLAYERS); // 4
// GameSettings.MAX_PLAYERS = 8; // שגיאה! אי אפשר לשנותבדרך כלל מצהירים על קבועים כ־public כי הם נועדו לשימוש משותף בכל רחבי היישום שלך. חשוב על ערכים כמו Math.PI — זהו קבוע ציבורי, סטטי וסופי שכל קוד יכול להשתמש בו.
למה להשתמש בקבועים במקום בערכים שמוטמעים ישירות בקוד? אם תכתוב 4 לאורך הקוד שלך ובהמשך תצטרך לשנות אותו ל־6, תצטרך למצוא ולעדכן כל מופע. עם קבוע כמו MAX_PLAYERS, משנים אותו במקום אחד.
קבועים גם הופכים את הקוד לקריא יותר - MAX_PLAYERS ברור יותר מ-4 מסתורי.
אתגר
קלבואו נבנה מחלקת עזר בשם MathConstants ששומרת ערכים מתמטיים חשובים כקבועים, לצד CircleCalculator שמשתמשת בקבועים האלה כדי לבצע חישובים.
תיצרו שני קבצים כדי לארגן את הקוד שלכם:
MathConstants.java: צרו מחלקה שמכילה קבועים מתמטיים באמצעות שדות מסוגpublic static final:PIעם הערך3.14159E(המספר של אוילר) עם הערך2.71828GOLDEN_RATIOעם הערך1.61803
Main.java: השתמשו בקבועים שלכם כדי לבצע חישובים של מעגל. תקבלו רדיוס כקלט ותדפיסו שלוש שורות:- שטח המעגל:
Area: [value] - היקף המעגל:
Circumference: [value] - הקוטר מוכפל ביחס הזהב:
Golden Diameter: [value]
- שטח המעגל:
עבור החישובים:
- שטח = PI * רדיוס * רדיוס
- היקף = 2 * PI * רדיוס
- קוטר הזהב = 2 * רדיוס * GOLDEN_RATIO
תקבלו קלט אחד: הרדיוס (double).
עצבו את כל ערכי הפלט עם 2 ספרות אחרי הנקודה העשרונית באמצעות String.format("%.2f", value). גשו לקבועים שלכם דרך שם המחלקה, למשל MathConstants.PI.
נסו בעצמכם
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double radius = scanner.nextDouble();
// TODO: חשבו את השטח באמצעות MathConstants.PI
// נוסחה: PI * radius * radius
// TODO: חשבו את היקף המעגל באמצעות MathConstants.PI
// נוסחה: 2 * PI * radius
// TODO: חשבו את קוטר הזהב באמצעות MathConstants.GOLDEN_RATIO
// נוסחה: 2 * radius * GOLDEN_RATIO
// TODO: הדפיסו את התוצאות בפורמט של 2 ספרות אחרי הנקודה העשרונית
// השתמשו ב-String.format("%.2f", value) לעיצוב
// פורמט הפלט:
// שטח: [value]
// Circumference: [value]
// Golden Diameter: [value]
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
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 אונליין