تعلم برمجة Java من الصفر
تُستخدم لغة Java على نطاق واسع في أنظمة المؤسسات وتطبيقات أندرويد والخوادم. ميزتها أن البرنامج الواحد يعمل على أنظمة تشغيل متعددة، إذ يُترجَم الكود المصدري إلى bytecode ثم يُنفَّذ على JVM (آلة Java الافتراضية). تأخذك هذه المقالة في كتابة أول برنامج، وفهم المتغيرات والشروط والحلقات والأصناف، ثم ترجمة البرنامج وتشغيله بنفسك.
جميع الأمثلة في هذه المقالة تمت ترجمتها وتشغيلها باستخدام Java 17، والمخرجات المعروضة حقيقية.
ما الذي تحتاجه
- JDK 17 أو أحدث (تحقق بالأمر `java -version` و`javac -version`)
- محرر نصوص مثل VS Code أو Notepad++
طريقة العمل
ثلاث خطوات: اكتب ملف `.java`، ثم ترجمه بالأمر `javac` ليُنتج ملف `.class`، ثم شغّله بالأمر `java`.
أول برنامج
أنشئ الملف `Hello.java`. يجب أن يطابق اسم الصنف اسم الملف. اكتب الكود التالي:
public class Hello {
public static void main(String[] args) {
System.out.println("สวัสดี Java");
}
}
الترجمة والتشغيل:
javac -encoding UTF-8 Hello.java
java -Dfile.encoding=UTF-8 Hello
المخرجات:
สวัสดี Java
الدالة `main` هي نقطة بداية البرنامج. ويطبع `System.out.println` النص على الشاشة. الخيار `-encoding UTF-8` يضمن قراءة النص التايلاندي في الملف بشكل صحيح.
المتغيرات والأنواع
لغة Java لغة ذات أنواع ثابتة، ويجب التصريح بنوع كل متغير.
| النوع | يخزّن | مثال |
|---|---|---|
| int | أعدادًا صحيحة | `int age = 20;` |
| double | أعدادًا عشرية | `double price = 19.5;` |
| boolean | صحيح أو خطأ | `boolean passed = true;` |
| String | نصًا | `String name = "สมชาย";` |
الشروط والحلقات
يحتوي المثال التالي على صنف `Student` يحدد التقدير من الدرجة، وحلقة `for` تمر على قائمة الطلاب.
import java.util.ArrayList;
import java.util.List;
public class Hello {
static class Student {
String name;
int score;
Student(String name, int score) {
this.name = name;
this.score = score;
}
String grade() {
if (score >= 80) return "A";
else if (score >= 70) return "B";
else if (score >= 50) return "C";
return "F";
}
}
public static void main(String[] args) {
System.out.println("สวัสดี Java");
List<Student> students = new ArrayList<>();
students.add(new Student("สมชาย", 85));
students.add(new Student("สมหญิง", 72));
students.add(new Student("สมศักดิ์", 45));
int total = 0;
for (Student s : students) {
System.out.println(s.name + " ได้เกรด " + s.grade());
total += s.score;
}
System.out.println("คะแนนเฉลี่ย: " + (total / students.size()));
}
}
المخرجات الفعلية:
สวัสดี Java
สมชาย ได้เกรด A
สมหญิง ได้เกรด B
สมศักดิ์ ได้เกรด F
คะแนนเฉลี่ย: 67
لاحظ ما يلي:
- الصنف `class Student` متداخل داخل `Hello` كصنف ثابت متداخل، لتجميع الكود المرتبط ببعضه.
- العبارة `this.name = name` تفصل بين معامل الدالة والحقل الذي له الاسم نفسه.
- القسمة `total / students.size()` قسمة صحيحة، لذلك تكون النتيجة 67 وليس 67.33. استخدم `double` إذا احتجت إلى الكسور.
أخطاء شائعة لدى المبتدئين
- **اسم الملف لا يطابق اسم الصنف:** إذا كان الصنف `public class Hello` فيجب أن يكون الملف `Hello.java`.
- **نسيان الفاصلة المنقوطة `;`:** كل عبارة تنتهي بـ `;`. وتشير رسالة الخطأ إلى السطر المقصود.
- **النص التايلاندي مشوّه:** ترجم بالخيار `-encoding UTF-8` وشغّل بالخيار `-Dfile.encoding=UTF-8`.
- **الأمر `javac` غير معروف:** تحقق من أن PATH يشير إلى مجلد `bin` الخاص بـ JDK.
الخطوات التالية
جرّب كتابة آلة حاسبة صغيرة، وخزّن قائمة بيانات باستخدام `ArrayList`، وقسّم الكود إلى عدة أصناف في عدة ملفات، قبل الانتقال إلى تطوير الويب باستخدام Spring Boot.
الخلاصة
تُترجم لغة Java الكود المصدري ثم تُشغَّل على JVM. نقطة البداية هي الدالة `main`، والمتغيرات لها أنواع واضحة، والأصناف تنظّم البرنامج.