ورقة Java المرجعية
آخر تحديث
Hello World وبنية البرنامج
كل برنامج Java يبدأ من دالة main داخل صنف.
| العنصر | الكود |
|---|---|
| تعريف الصنف | public class Main { ... } |
| نقطة الدخول | public static void main(String[] args) { ... } |
| طباعة سطر | System.out.println("Hello, World!"); |
| الطباعة دون سطر جديد | System.out.print("text"); |
| قراءة الإدخال | Scanner sc = new Scanner(System.in); |
| استيراد صنف | import java.util.ArrayList; |
| التعليقات | // line و /* block */ |
أنواع البيانات
الأنواع الأولية بحروف صغيرة؛ وأصنافها الغلافية تبدأ بحرف كبير.
| النوع | الوصف |
|---|---|
int | عدد صحيح بإشارة 32-بت |
long | عدد صحيح بإشارة 64-بت |
double / float | أعداد عشرية (نقطة عائمة) |
boolean | true أو false |
char | حرف Unicode واحد 16-بت |
byte / short | أعداد صحيحة 8-بت / 16-بت |
String | نص غير قابل للتغيير (صنف وليس نوعًا أوليًا) |
Integer, Double, Boolean | أصناف غلافية للأنواع الأولية |
var | نوع محلي مستنتَج (Java 10+) |
المتغيرات
| العملية | الصياغة |
|---|---|
| التعريف والتهيئة | int x = 5; |
| استنتاج النوع (محلي) | var name = "Ada"; |
| ثابت | final double PI = 3.14159; |
| دمج السلاسل النصية | String s = "Hi " + name; |
| تحويل سلسلة نصية إلى int | int n = Integer.parseInt("42"); |
| تحويل int إلى سلسلة نصية | String s = String.valueOf(42); |
| سلسلة نصية منسّقة | String.format("%d items", n) |
التحكم في التدفق
| العبارة | الصياغة |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| عبارة switch | switch (n) { case 1: ...; break; default: ...; } |
| تعبير switch | var s = switch (n) { case 1 -> "one"; default -> "other"; }; |
| حلقة while | while (i < n) { ... } |
| حلقة do-while | do { ... } while (i < n); |
| حلقة for | for (int i = 0; i < n; i++) { ... } |
| for المحسّنة (for-each) | for (String item : list) { ... } |
| Break / continue | break; تخرج من حلقة، و continue; تتخطّى إلى التكرار التالي |
الدوال
| العملية | الصياغة |
|---|---|
| تعريف دالة | int add(int a, int b) { return a + b; } |
| دون قيمة إرجاع | void greet() { ... } |
| دالة ساكنة (static) | static int square(int x) { return x * x; } |
| دالة عامة (public) | public String getName() { return name; } |
| وسائط متغيرة (Varargs) | int sum(int... nums) { ... } |
| استدعاء دالة | int r = add(2, 3); |
| استدعاء دالة ساكنة | Math.max(a, b); |
| تحميل زائد للدالة (overloading) | int max(int a, int b) و double max(double a, double b) |
الأصناف والبرمجة الكائنية (OOP)
| العملية | الصياغة |
|---|---|
| تعريف صنف | public class Dog { ... } |
| حقل | private String name; |
| باني (constructor) | public Dog(String name) { this.name = name; } |
| إنشاء كائن | Dog d = new Dog("Rex"); |
| Getter / setter | public String getName() { return name; } |
| الوراثة | class Puppy extends Dog { ... } |
| واجهة | interface Runnable { void run(); } |
| تنفيذ واجهة | class Task implements Runnable { ... } |
| تجاوز دالة (override) | @Override public void speak() { ... } |
المجموعات
مجموعات عامة من java.util.
| النوع | الاستخدام والمثال |
|---|---|
ArrayList<T> | مصفوفة ديناميكية: list.add(1); list.get(0); list.size(); |
HashMap<K, V> | مفتاح-قيمة: map.put("a", 1); map.get("a"); |
HashSet<T> | قيم فريدة: set.add(5); set.contains(5); |
LinkedList<T> | قائمة مرتبطة مزدوجة، جيدة كطابور/طابور ثنائي |
ArrayDeque<T> | مكدّس/طابور: dq.push(x); dq.pop(); |
| مصفوفة | int[] nums = {1, 2, 3}; |
| التكرار على قائمة | for (T x : list) { ... } |
| التكرار على خريطة | for (var e : map.entrySet()) { e.getKey(); e.getValue(); } |
Streams و lambdas
خطوط أنابيب بأسلوب وظيفي على المجموعات (Java 8+).
| العملية | الصياغة |
|---|---|
| تعبير lambda | x -> x * 2 |
| إنشاء stream | list.stream() |
| التصفية | .filter(n -> n > 0) |
| التحويل / Map | .map(n -> n * 2) |
| الترتيب | .sorted() أو .sorted(Comparator.reverseOrder()) |
| الاختزال / الجمع | .reduce(0, Integer::sum) |
| العدّ / المطابقة | .count(), .anyMatch(n -> n > 5) |
| الجمع في قائمة | .collect(Collectors.toList()) |
| لكل عنصر | .forEach(System.out::println) |
الأنماط الشائعة (try/catch والأنواع العامة)
| النمط | الصياغة |
|---|---|
| Try / catch | try { ... } catch (Exception e) { ... } |
| التقاط استثناء محدّد | catch (IOException e) { ... } |
| Finally | finally { ... } تعمل دائمًا |
| Try-with-resources | try (Scanner sc = new Scanner(...)) { ... } |
| رمي استثناء | throw new IllegalArgumentException("bad"); |
| صنف عام | class Box<T> { T value; } |
| دالة عامة | <T> T first(List<T> list) { ... } |
| نوع مقيّد | <T extends Number> |
صياغة Java ومجموعاتها وعمليات streams التي تستخدمها أكثر من غيرها، على صفحة واحدة. ورقة Java المرجعية هذه هي مرجع سريع لكتابة Java - أنواع البيانات، والتحكم في التدفق، والأصناف، ومجموعات ArrayList/HashMap، وواجهة Streams، وأنماط الاستثناءات والأنواع العامة التي تستخدمها يوميًا.
كل ما هنا هو Java قياسية (Java 8 وما بعدها) ويُترجم بـ javac. انسخ ما تحتاجه، أو جرّب أيّ مقطع برمجي مباشرة في playground الخاص بـ Java - دون الحاجة إلى تثبيت أي JDK.
الأسئلة الشائعة حول ورقة Java المرجعية
هل ورقة Java المرجعية هذه مجانية؟
نعم. ورقة Java المرجعية هذه مجانية تمامًا، دون الحاجة إلى التسجيل. أضِفها إلى المفضلة وارجع إليها متى احتجت إلى البحث عن صياغة أو مجموعة أو عملية stream.
ما الفرق بين == و .equals() في Java؟
== المراجع - أي ما إذا كان متغيران يشيران إلى الكائن نفسه بالضبط - بينما يقارن .equals() المحتويات. كائنا String مختلفان بالنص نفسه يتساويان بـ .equals() لكن قد لا يتساويان بـ ==. استخدم دائمًا .equals() لمقارنة السلاسل النصية وغيرها من الكائنات من حيث تساوي القيمة؛ واستخدم == فقط للأنواع الأولية (int و boolean وغيرها) أو للتحقق من null.فيمَ تُستخدم streams في Java؟
filter و map و sorted و reduce و collect - بدلًا من الحلقات اليدوية. تبدأ بـ list.stream()، وتسلسل العمليات الوسيطة، وتنهي بعملية طرفية مثل collect(Collectors.toList()) أو forEach. وهي تُبقي كود تحويل البيانات موجزًا ومعبّرًا.هل يمكنني التدرّب على Java عبر الإنترنت؟
نعم. افتح playground الخاص بـ Java لترجمة وتشغيل أيّ مقطع برمجي من هذه الورقة المرجعية في متصفحك - دون الحاجة إلى تثبيت أي JDK. وعندما ترغب في تعلّم منظّم، تأخذك دورة Java التفاعلية المجانية من Coddy من المتغيرات والحلقات إلى الأصناف والمجموعات و streams خطوة بخطوة.
هل هذه الورقة المرجعية مناسبة للمبتدئين؟
نعم. إنها مرتّبة من اللبنات الأكثر شيوعًا (الأنواع والتحكم في التدفق والدوال) وصولًا إلى المتقدمة (streams والأنواع العامة والاستثناءات)، بحيث يمكنك استخدام الأقسام العلوية من اليوم الأول والتدرّج إلى البقية.