מילת המפתח static בשפת ג'אווה משמשת הרבה בתכנות בג'אווה. מילת המפתח static בג'אווה משמשת ליצירת משתנה ברמת המחלקה בג'אווה. משתנים ושיטות סטטיות הם חלק מהמחלקה עצמה, ולא מהמופעים של המחלקה.
מילת המפתח static בג'אווה
מילת המפתח Java static יכולה לשמש בחמישה מקרים כפי שמוצג בדימוי למטה.
נדבר על ארבעה מתוכם כאן, החמישי נוסף בג'אווה 8 וכולל דיון ב-שינויים בממשק ב-Java 8.
-
משתנה סטטי של Java
אנו יכולים להשתמש במילת המפתח
static
עם משתנה ברמת המחלקה. משתנה סטטי הוא משתנה של מחלקה ואינו שייך לאובייקט/מופע של המחלקה. מאחר ומשתני סטטי משותפים בין כל המופעים של אובייקט, הם לא בטוחים לשימוש רציף. לרוב, משתני סטטי משמשים עם המילת המפתח final עבור משאבים משותפים או קבועים שניתן להשתמש בהם על ידי כל האובייקטים. אם המשתנה הסטטי אינו פרטי, אפשר לגשת אליו עםשם_המחלקה.שם_המשתנה
//דוגמת משתנה סטטי private static int count; public static String str; public static final String DB_USER = "myuser";
-
שפה תכנותית סטטית של Java
כמו משתנה סטטי, שיטה סטטית שייכת למחלקה ולא למופעים של מחלקה. שיטה סטטית יכולה לגשת רק למשתנים סטטיים של המחלקה ולקרוא רק לשיטות סטטיות של המחלקה. לרוב, שיטות סטטיות הן שיטות יוטיליטריות שברצוננו לחשוף כדי שימוש על ידי מחלקות אחרות מבלי לצורך ביצירת מופע. לדוגמה מחלקת Collections. מחלקות Wrapper ב-Java ומחלקות יוטיליטי מכילות המון שיטות סטטיות. השיטה main() שהיא נקודת הכניסה של תוכנית Java עצמה היא גם היא שיטה סטטית.
//דוגמה לשיטה סטטית public static void setCount(int count) { if(count > 0) StaticExample.count = count; } //שיטת יוטיליטי סטטית public static int addInts(int i, int...js){ int sum=i; for(int x : js) sum+=x; return sum; }
מ-Java 8 והלאה, אנו יכולים להשתמש בשיטות סטטיות גם בממשקים. לפרטים נוספים נא לקרוא שינויים בממשק Java 8.
-
בלוק סטטי של Java
בלוק סטטי של Java הוא קבוצת ההצהרות שמתבצעות כאשר המחלקה נטענת לזיכרון על ידי Java ClassLoader. בלוק סטטי משמש לאתחול משתני הסטטיים של המחלקה. לרוב, הוא משמש ליצירת משאבים סטטיים כאשר המחלקה נטענת. לא ניתן לגשת למשתנים לא סטטיים בבלוק הסטטי. ניתן להכיל מספר בלוקים סטטיים במחלקה, אף על פי שזה לא משמעותי הרבה. קוד בלוק סטטי מבוצע רק פעם אחת כאשר המחלקה נטענת לזיכרון.
static{ // ניתן להשתמש לאתחול משאבים כאשר המחלקה נטענת System.out.println("בלוק סטטי של StaticExample"); // ניתן לגשת רק למשתנים ולשיטות סטטיים str="Test"; setCount(2); }
-
מחלקה סטטית ב-Java
ניתן להשתמש במילת המפתח סטטי עם מחלקות מקוננות. לא ניתן להשתמש במילת המפתח סטטי עם מחלקות ברמת על. מחלקה מקוננת סטטית דומה למחלקה רמת על אחרת ונקנית בעיקר לצורת ארגון. קרא: מחלקות מקוננות ב-Java
בואו נראה את כל שימושי מילת המפתח `static` ב־Java בתוך תוכנית דוגמה. StaticExample.java
package com.journaldev.misc;
public class StaticExample {
//בלוק סטטי
static{
//ניתן להשתמש לאתחול משאבים כאשר המחלקה נטענת
System.out.println("StaticExample static block");
//ניתן לגשת רק למשתנים ולשיטות סטטיים
str="Test";
setCount(2);
}
//מספר בלוקים סטטיים באותה מחלקה
static{
System.out.println("StaticExample static block2");
}
//דוגמה לשימוש במשתנה סטטי
private static int count; //kept private to control its value through setter
public static String str;
public int getCount() {
return count;
}
//דוגמה לשימוש בשיטה סטטית
public static void setCount(int count) {
if(count > 0)
StaticExample.count = count;
}
//דוגמה לשיטת יוטיליטי סטטית
public static int addInts(int i, int...js){
int sum=i;
for(int x : js) sum+=x;
return sum;
}
//דוגמה לשימוש במחלקה סטטית - בשימוש רק למטרות אריזה
public static class MyStaticClass{
public int count;
}
}
בואו נראה איך להשתמש במשתנה, בשיטה ובמחלקה סטטית בתוך תוכנית בדיקה. TestStatic.java
package com.journaldev.misc;
public class TestStatic {
public static void main(String[] args) {
StaticExample.setCount(5);
//ניתן לגשת למשתנים סטטיים לא-פרטיים באמצעות שם המחלקה
StaticExample.str = "abc";
StaticExample se = new StaticExample();
System.out.println(se.getCount());
//משתנים סטטיים של מחלקה ושל אינסטנס הם זהים
System.out.println(StaticExample.str +" is same as "+se.str);
System.out.println(StaticExample.str == se.str);
//מחלקות מקוננות סטטיות דומות למחלקות רמת העל הרגילות
StaticExample.MyStaticClass myStaticClass = new StaticExample.MyStaticClass();
myStaticClass.count=10;
StaticExample.MyStaticClass myStaticClass1 = new StaticExample.MyStaticClass();
myStaticClass1.count=20;
System.out.println(myStaticClass.count);
System.out.println(myStaticClass1.count);
}
}
פלט התוכנית הדוגמה לשימוש במילת המפתח `static` ב־Java הוא:
StaticExample static block
StaticExample static block2
5
abc is same as abc
true
10
20
שים לב שקוד בלוק הסטטי מתבצע ראשוני ורק פעם אחת כשהמחלקה נטענת לזיכרון. הפלטים האחרים הם מוסברים באופן ברור לבד.
יבוא סטטי של Java
בדרך כלל אנו גושים את המשתנים הסטטיים באמצעות הפנייה למחלקה, מאז Java 1.5 ניתן להשתמש בייבוא סטטי של Java כדי למנוע הפנייה למחלקה. למטה דוגמה פשוטה לייבוא סטטי של Java.
package com.journaldev.test;
public class A {
public static int MAX = 1000;
public static void foo(){
System.out.println("foo static method");
}
}
package com.journaldev.test;
import static com.journaldev.test.A.MAX;
import static com.journaldev.test.A.foo;
public class B {
public static void main(String args[]){
System.out.println(MAX); //normally A.MAX
foo(); // normally A.foo()
}
}
שים לב להצהרות הייבוא, לייבוא סטטי עלינו להשתמש ב־import static
ולאחריו את המשתנה הסטטי המקובל של המחלקה. לייבוא כל המשתנים הסטטיים של מחלקה, אנו יכולים להשתמש ב־* כמו ב־import static com.journaldev.test.A.*;
. עלינו להשתמש בכך רק כאשר אנו משתמשים במשתנה הסטטי של המחלקה מספר פעמים, וזה אינו טוב לקריאות. עדכון: לאחרונה יצרתי סרטון כדי להסביר מילת המפתח הסטטית ב־Java, כדאי שתצפה בו למטה. https://www.youtube.com/watch?v=2e-l1vb\_fwM
Source:
https://www.digitalocean.com/community/tutorials/static-keyword-in-java