تخطَّ إلى المحتوى

المتغيرات وأنواع البيانات في Java

الدرس 2 من 11 · Java

Java لغة صارمة في التعامل مع البيانات: يجب أن تعلن نوع كل متغير قبل استخدامه، والمترجم يراجع كل سطر قبل التشغيل. قد يبدو هذا متعباً في البداية، لكنه السبب في أن Java تُستخدم في الأنظمة الكبيرة كالبنوك وتطبيقات الشركات: الأخطاء تُكتشف مبكراً قبل أن تصل للمستخدمين. في هذا الدرس ستتعلم المتغيرات وأنواعها بالتفصيل.

String name = "سارة";
int points = 10;
points = points + 5;
System.out.println(name + " لديها " + points + " نقطة");
الناتج
سارة لديها 15 نقطة

الصيغة دائماً: النوع ثم الاسم ثم = ثم القيمة، وفي النهاية فاصلة منقوطة ;.

تخيّل المتغيرات مثل أدراج مكتب لكل درج نوع محدد: درج للأوراق، ودرج للأقلام. لا تستطيع وضع قلم في درج الأوراق، وكذلك لا تستطيع وضع نص في متغير من نوع int.

لدمج النصوص مع القيم في Java نستخدم علامة +، كما في السطر الأخير.

Java فيها أنواع بدائية (Primitive Types) بسيطة وسريعة، تُكتب بحروف صغيرة:

int students = 30;
double price = 12.5;
boolean isOpen = true;
char grade = 'A';
long big = 7_000_000_000L;
النوع يخزن ملاحظة
int أعداد صحيحة حتى 2 مليار تقريباً
long أعداد صحيحة كبيرة جداً ينتهي الرقم بحرف L
double أعداد عشرية الأشهر للكسور
boolean true أو false
char حرف واحد بين علامتين مفردتين 'A'

والشرطة السفلية في 7_000_000_000L لتسهيل القراءة فقط.

النصوص في Java من نوع String بحرف كبير، لأنه ليس نوعاً بدائياً بل كلاس، وستفهم معنى ذلك في درس الكلاسات. يُكتب النص بين علامتين مزدوجتين دائماً: "مرحباً". أما العلامتان المفردتان فللحرف الواحد فقط من نوع char.

System.out.println(10 / 4);
System.out.println(10.0 / 4);
System.out.println(10 % 4);
الناتج
2
2.5
2

قسمة عددين صحيحين تعطي عدداً صحيحاً ويُحذف الكسر. إذا أردت الكسر، اجعل أحد الطرفين عشرياً. والعامل % يعطي باقي القسمة.

منذ Java 10 يمكنك استخدام var للمتغيرات المحلية، فيستنتج المترجم النوع من القيمة:

var city = "القاهرة"; // String
final double TAX = 0.14; // ثابت لا يتغير
  • var: النوع يُستنتج، لكنه يبقى ثابتاً بعد ذلك.
  • final: قيمة لا يمكن تغييرها بعد إسنادها. والعُرف أن تُكتب أسماء الثوابت بحروف كبيرة مثل TAX.

التحويل التلقائي يحدث عندما تنقل قيمة لنوع «أوسع» دون فقدان بيانات:

int a = 7;
double d = a; // 7.0

التحويل الصريح (Casting) مطلوب عندما قد تفقد بيانات، وتكتبه بين قوسين:

double avg = 7.9;
int rounded = (int) avg;
System.out.println(rounded);
الناتج
7

لاحظ: (int) تقطع الكسر ولا تقرّب، فأصبحت 7.9 تساوي 7.

من نص إلى رقم:

int n = Integer.parseInt("25");
System.out.println(n + 5);
System.out.println("25" + 5);
System.out.println(Double.parseDouble("2.5") * 2);
الناتج
30
255
5.0

انتبه للسطر الثاني: "25" + 5 تعطي النص "255"! لأن + مع نص تعني الدمج لا الجمع.

printf و String.format تعطيانك تحكماً أدق في شكل الأرقام:

System.out.printf("السعر: %.2f جنيه%n", 12.5);
System.out.println(String.format("%s عمرها %d سنة", "منى", 13));
الناتج
السعر: 12.50 جنيه
منى عمرها 13 سنة
  • %s مكان نص، و %d مكان عدد صحيح، و %.2f مكان عدد عشري برقمين بعد الفاصلة.
  • %n سطر جديد.
public class Main {
public static void main(String[] args) {
String productName = "سماعة";
double unitPrice = 150.0;
int quantity = 2;
double total = unitPrice * quantity;
System.out.println("المنتج: " + productName);
System.out.println("الإجمالي: " + total + " جنيه");
}
}
الناتج المتوقع
المنتج: سماعة
الإجمالي: 300.0 جنيه

تحدٍّ: أضف ثابتاً final double TAX = 0.14; واطبع الإجمالي بعد الضريبة برقمين عشريين باستخدام printf.

  • نسيان الفاصلة المنقوطة: خطأ ';' expected. كل أمر في Java ينتهي بـ ;.
  • نوع غير متطابق: int x = "5"; خطأ incompatible types: String cannot be converted to int.
  • الخلط بين “” و ‘’: char c = "A"; خطأ. الحرف الواحد بعلامتين مفردتين.

سؤال

ما ناتج System.out.println((int) 9.8);؟

سؤال

ما ناتج System.out.println("3" + 4);؟

  • كل متغير في Java له نوع معلن: int و long و double و boolean و char بدائية، و String كلاس.
  • var يستنتج النوع، و final للثوابت.
  • قسمة الأعداد الصحيحة تحذف الكسر، و (int) تقطع ولا تقرّب.
  • Integer.parseInt و Double.parseDouble لتحويل النصوص إلى أرقام.
  • printf مع %s و %d و %.2f لتنسيق المخرجات.