ورقة 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 المرجعية هذه مجانية؟
ما الفرق بين == و .equals() في Java؟
== المراجع - أي ما إذا كان متغيران يشيران إلى الكائن نفسه بالضبط - بينما يقارن .equals() المحتويات. كائنا String مختلفان بالنص نفسه يتساويان بـ .equals() لكن قد لا يتساويان بـ ==. استخدم دائمًا .equals() لمقارنة السلاسل النصية وغيرها من الكائنات من حيث تساوي القيمة؛ واستخدم == فقط للأنواع الأولية (int و boolean وغيرها) أو للتحقق من null.فيمَ تُستخدم streams في Java؟
filter و map و sorted و reduce و collect - بدلًا من الحلقات اليدوية. تبدأ بـ list.stream()، وتسلسل العمليات الوسيطة، وتنهي بعملية طرفية مثل collect(Collectors.toList()) أو forEach. وهي تُبقي كود تحويل البيانات موجزًا ومعبّرًا.