Menu

מה זה Java? השפה, ה-JVM והמקומות שבהם היא רצה

מה Java באמת, איך ה-JVM מאפשרת לתוכנית מקומפלת אחת לרוץ בכל מקום, ואילו סוגי תוכנה בונים עם Java.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

Java במשפט אחד

Java היא שפת תכנות מונחית עצמים עם טיפוסים סטטיים, שמקומפלת ל-bytecode ורצה על המכונה הווירטואלית של Java (JVM). ההחלטה העיצובית הזו, לקמפל לפורמט ביניים ניטרלי ואז להריץ אותו על מכונה וירטואלית, היא הסיבה שאותה תוכנית Java מקומפלת רצה בלי שינוי על Windows, macOS, Linux ועוד.

הנה התוכנית הראשונה המתבקשת. אפשר להריץ אותה כאן:

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

למה ה-JVM חשובה

רוב השפות המקומפלות הופכות קוד מקור ישירות לקוד מכונה עבור מעבד ומערכת הפעלה מסוימים. תוכנית שקומפלה ל-Windows לא תרוץ על Mac. Java עושה עיקוף:

  1. javac מקמפל את קוד המקור .java לקבצי .class שמכילים bytecode: הוראות למכונה דמיונית, לא לאף מעבד אמיתי.
  2. ה-JVM של הפלטפורמה קוראת את ה-bytecode ומריצה אותו, ומתרגמת אותו תוך כדי להוראות מכונה נייטיב.

מכיוון שלכל פלטפורמה יש JVM משלה אבל כולן מבינות את אותו bytecode, מקמפלים פעם אחת ומריצים את התוצאה בכל מקום שיש בו JVM. זו הסיסמה המפורסמת: write once, run anywhere, כתבו פעם אחת והריצו בכל מקום.

ה-JVM לא סתם מפרשת בעיוורון. מהדר just-in-time (JIT) עוקב אחרי הקוד שרץ הכי הרבה ומקמפל את הנתיבים החמים האלה לקוד נייטיב ממוטב, כך שתוכניות Java שרצות זמן רב מתקרבות למהירות של שפות מקומפלות לגמרי.

טיפוסים סטטיים ומונחית עצמים

שתי תכונות קובעות איך קוד Java נראה ומרגיש.

טיפוסים סטטיים פירושו שלכל משתנה יש טיפוס שידוע בזמן הקומפילציה, והמהדר בודק את הטיפוסים עוד לפני שהתוכנית רצה בכלל:

count הוא int לתמיד; השמה של "hello" אליו לא תעבור קומפילציה. זה תופס סוג שלם של טעויות מוקדם, במחיר של יותר הקלדה בהתחלה.

מונחית עצמים פירושו ש-Java מארגנת קוד במחלקות: שרטוטים שמאגדים נתונים ואת המתודות שפועלות עליהם. אפילו נקודת הכניסה שלמעלה נמצאת בתוך class Main. כמעט כל מה שכותבים ב-Java נמצא בתוך מחלקה.

למה משתמשים ב-Java

Java היא אחת השפות הנפוצות ביותר בעולם. תמצאו אותה ב:

  • מערכות backend וארגוניות: בנקאות, ביטוח, שירותי web גדולים וכל מה שצריך לרוץ באמינות במשך שנים.
  • Android: השפה המקורית של הפלטפורמה, שעדיין מרכזית בסביבת הריצה של Android גם לצד Kotlin.
  • Big data: Hadoop, Spark, Kafka וחלק גדול מעולם הנדסת הנתונים רצים על ה-JVM.
  • דסקטופ ומערכות משובצות: מסביבות פיתוח (IntelliJ, Eclipse) ועד מסופי קופה וכרטיסים חכמים.

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

Java היא לא JavaScript

שווה לומר את זה במפורש, כי השמות גורמים לבלבול אינסופי: Java ו-JavaScript הן שפות שונות שאין ביניהן קשר. הן חולקות ארבע אותיות מסיבות שיווקיות היסטוריות, ושום דבר אחר שחשוב. Java מקומפלת, עם טיפוסים סטטיים, ורצה על ה-JVM; JavaScript היא עם טיפוסים דינמיים ורצה בדפדפנים וב-Node.js. ללמוד אחת לא מלמד את השנייה.

הבא: התקנת Java

כדי לכתוב ולהריץ Java על המחשב שלכם צריך JDK (Java Development Kit): המהדר, ה-JVM והספרייה הסטנדרטית. העמוד הבא מסביר איך להתקין אותו ולוודא שהוא עובד.

שאלות נפוצות

למה משתמשים ב-Java?

Java מפעילה מערכות שרת וארגוניות גדולות, אפליקציות Android (דרך ה-Android SDK וסביבת הריצה המשותפת עם Kotlin), כלי big data כמו Hadoop ו-Spark, ואינספור אפליקציות דסקטופ ומערכות משובצות. החוזקות שלה הן יציבות, ספרייה סטנדרטית ענקית, וה-JVM שמריצה את אותה תוכנית מקומפלת בכל מערכת הפעלה.

האם Java היא שפה מקומפלת או מפורשת?

גם וגם. המהדר של Java (javac) הופך את קוד המקור ל-bytecode שאינו תלוי בפלטפורמה, ואז ה-JVM מריצה את ה-bytecode הזה: בהתחלה היא מפרשת אותו, ואת הנתיבים החמים היא מקמפלת לקוד מכונה נייטיב בעזרת מהדר just-in-time (JIT). כלומר Java מקומפלת ל-bytecode, ואז מפורשת ומקומפלת ב-JIT בזמן ריצה.

האם Java זה אותו דבר כמו JavaScript?

לא. אלה שפות שאין ביניהן קשר, והן חולקות שם מסיבות שיווקיות היסטוריות. Java היא שפה מקומפלת עם טיפוסים סטטיים שרצה על ה-JVM; JavaScript היא שפה עם טיפוסים דינמיים שרצה בדפדפנים וב-Node.js. מי שיודע אחת לא יודע בהכרח את השנייה.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל