שדות מחלקה (משתנים גלובליים)

עד כה, ראינו שתי צורות לניהול זיכרון בג'אווה. משתנים מקומיים נוצרים בנקודת ההגדרה שלהם ונעלמים בסיום הגוש הפנימי ביותר שבו הוגדרו (לרוב בסוף השירות), ומערכים נוצרים בעזרת האופרטור new ונעלמים כאשר אין יותר התייחסויות אליהם. 

שדות מחלקה (class fields) מהווים צורה שלישית לניהול זיכרון: אלו משתנים שנוצרים בתחילת התוכנית וקיימים עד שהיא מסתיימת. הם שימושיים כאשר שירות (או במקרים מורכבים יותר, קבוצה של שירותים) צריכים לזכור ערך מסויים בין הפעלות של השירות. בג'אווה, משתנים כאלה מוגדרים לא בתוך השירות, אלא מחוץ לכל השירותים שמוגדרים במחלקה (אבל בתוך מחלקה, כמו כל ההגדרות בג'אווה).

שדות מחלקה דומים בהתנהגות שלהם למשתנים גלובליים בשפות תכנות אחרות, כמו C למשל. אי אפשר להגדיר בג'אווה משתנים בתוך שירות שמשך חייהם גדול משל הפעלה בודדת של השירות, כמו שאפשר להגדיר ב-C.

הגדרה של שדות מחלקה מורכבת מ-modifiers שחייבים לכלול את מילת המפתח static (אחרת השדה אינו שדה מחלקה), משם של טיפוס, למשל int או String[], ומשם השדה. אפשר להוסיף להגדרה כזו פסוק איתחול, שמורכב מסימן שווה ולאחריו ביטוי מטיפוס שניתן לשים בשדה. האתחול הזה מתבצע לפני השימוש הראשון בשדה.

הבה נתבונן בהגדרה ואתחול של משתנה כזה:

public static int counter = 0;

ההגדרה הזו כוללת שני modifiers, את מילות המפתח static שכאמור מציינת שהשדה הוא שדה מחלקה ו-public שמציינת שניתן להשתמש בשדה הזה מכל מקום בתוכנית. אין חשיבות לסדר ה-modifiers. לאחר מכן מצויין שם הטיפוס, שם המשתנה, ופסוק האתחול. ההגדרה של שדה במחלקה (גם שדות מחלקה וגם שדות אחרים) צריכה להסתיים בנקודה פסיק.