Java: ما هي هذه اللغة، ميزاتها وتطوير Android

المؤلف: IT Sectr نُشر: 2026-02-10 وقت القراءة: 11 دق

Java هي لغة برمجة كائنية التوجه كانت اللغة الرئيسية لـ Android SDK لأكثر من عقد. على الرغم من الانتقال الرسمي من Google إلى Kotlin، تظل Java جزءًا مهمًا من النظام البيئي: المشاريع القديمة، التطبيقات المؤسسية وملايين الأسطر من الكود في Google Play تستمر في العمل على Java. وفقًا لتقرير JetBrains Developer Ecosystem (2025)، حوالي 35% من مشاريع Android لا تزال تستخدم Java. اقرأ المزيد عن الاتجاهات الحالية في التقرير الرسمي لـ JetBrains.

أهم النقاط

  • Java — اللغة الرئيسية لنظام Android حتى 2019، الكود القديم يشكل ~35% من المشاريع
  • JVM — الآلة الافتراضية التي تضمن تشغيل bytecode جافا عبر المنصات
  • Android SDK — مجموعة كاملة من الأدوات تشمل المترجم والمحاكي والملف الشخصي
  • Kotlin — خليفة Java، لكن كلتا اللغتين تُترجمان إلى نفس bytecode JVM
  • Gradle — نظام البناء الذي يدير التبعيات والتكوينات في مشاريع Android

ما هي Java؟

Java هي لغة برمجة للأغراض العامة أنشأتها شركة Sun Microsystems في عام 1995. المبدأ الرئيسي هو "Write Once, Run Anywhere": يتم تنفيذ bytecode جافا المترجم على أي منصة مثبت عليها الآلة الافتراضية JVM. في سياق التطوير المحمول، أصبحت Java أول لغة رسمية لـ Android SDK، الذي أصدرته Google في عام 2008.

تعتمد بنية Java على ثلاثة مكونات: JDK (Java Development Kit) — مجموعة أدوات المطور، JRE (Java Runtime Environment) — بيئة التشغيل، و JVM (Java Virtual Machine) — الآلة الافتراضية. يستخدم Android تطبيقه الخاص من JVM — Android Runtime (ART)، الذي حل محل Dalvik في الإصدار 5.0 (Lollipop). ينفذ ART bytecode DEX، الذي يُترجم من bytecode جافا عبر أداة dx/d8.

ميزة رئيسية لـ Java هي إدارة الذاكرة التلقائية عبر Garbage Collector (GC). لا يحتاج المطور إلى تحرير الذاكرة بشكل صريح — يتتبع GC الكائنات غير المستخدمة ويزيلها. في Android ART، يتم استخدام Concurrent Mark Sweep (CMS) و Generational GC، المُحسَّنين للموارد المحدودة للأجهزة المحمولة. هذا يقلل العبء على المطور، لكنه قد يسبب "تباطؤًا" أثناء جمع القمامة في سلسلة واجهة المستخدم.

إصدارات Java و Android API

يدعم Android مجموعة فرعية من Java API التي تتوسع مع كل إصدار جديد من نظام التشغيل. أضاف Android 12 (API 31) دعم Java 11، بما في ذلك لامدا مع التقاط المتغيرات، نظام الوحدات JPMS، وعميل HTTP java.net.http. قدم Android 14 (API 34) دعمًا تجريبيًا لـ Java 17 عبر desugaring D8/R8 — بعض الميزات (records, sealed classes) تُترجم إلى كود متوافق للإصدارات القديمة.

إصدار JavaAndroid API (min)إصدار Androidالميزات الرئيسية
Java 7API 194.4 KitKattry-with-resources, multi-catch
Java 8API 247.0 Nougatلامدا، Stream API، Optional
Java 11API 3112HTTP Client, Local-Variable Syntax
Java 17API 3414Records, Sealed Classes (D8)

Java SDK وتطوير Android

يتضمن Android SDK مترجم Java، أداة dex (d8)، aapt (أداة تعبئة الأصول)، المحاكي ومكتبات android.* و java.*. يكتب المطور الكود بلغة Java، ويُجمعه إلى ملفات .class (bytecode JVM)، ثم يحولها d8 إلى ملفات .dex (Dalvik Executable)، التي تُحزم في APK مع الموارد و AndroidManifest.xml.

Gradle هو نظام بناء مشاريع Android. ملف build.gradle (Groovy) أو build.gradle.kts (Kotlin DSL) يصف التبعيات، إصدارات SDK، النكهات والتوقيعات. يقوم Android Gradle Plugin (AGP) الإصدار 8.x بأتمتة desugar — ترجمة ميزات Java الحديثة إلى كود متوافق مع الإصدارات السابقة. على سبيل المثال، java.time.LocalDate يُحوَّل إلى كود متوافق مع API 21+ دون تغييرات في كود المطور المصدر.

java
// نشاط Android بسيط بلغة Java
package com.example.myapp;

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = findViewById(R.id.textView);
        tv.setText("Hello from Java!");
    }

    // طريقة لمعالجة النقر على الزر
    public void onButtonClick(View view) {
        TextView tv = findViewById(R.id.textView);
        tv.setText("Button clicked");
    }
}

الفئة MainActivity ترث AppCompatActivity — فئة أساسية من AndroidX للتوافق مع الإصدارات السابقة. يتم استدعاء طريقة onCreate عند إنشاء Activity، فيها يتم تعيين التخطيط عبر setContentView. يربط findViewById متغير Java بعنصر من تخطيط XML. طريقة onButtonClick مرتبطة بالزر عبر السمة android:onClick في XML.

العمل مع Activity ودورة الحياة

دورة حياة Activity في Java هي سلسلة من الاستدعاءات: onCreate → onStart → onResume (نشط)، onPause → onStop → onDestroy (إنهاء). يقوم المطور بتجاوز هذه الطرق لإدارة الموارد. onCreate — تهيئة، onPause — حفظ البيانات، onDestroy — تحرير الموارد. يستدعي Android هذه الطرق عند تدوير الشاشة، الدخول في الخلفية واستقبال مكالمة.

java
// دورة حياة النشاط مع إدارة الحالة
public class DetailActivity extends AppCompatActivity {
    private String itemId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        itemId = getIntent().getStringExtra("ITEM_ID");
        loadData(itemId);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("item_id", itemId);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        itemId = savedInstanceState.getString("item_id");
        loadData(itemId);
    }

    private void loadData(String id) {
        // تحميل البيانات حسب المعرف
    }
}

طريقة onSaveInstanceState تحفظ حالة Activity عند تدوير الشاشة أو تبديل المهام. تحتوي Bundle على أزواج مفتاح-قيمة — أنواع بسيطة، كائنات Parcelable أو Serializable. يستعيد onRestoreInstanceState الحالة المحفوظة. هذا النمط حاسم لنظام Android، حيث يمكن للنظام تدمير Activity عند نقص الذاكرة واستعادتها عند عودة المستخدم.

بناء جملة Java: الفئات والطرق والأنواع

بناء جملة Java شبيه بلغة C، شديد النمطية، كائني التوجه. كل ملف .java يحتوي على فئة عامة واحدة يتطابق اسمها مع اسم الملف. لا تدعم Java الدوال خارج الفئات — كل شيء هو طريقة. نقطة الدخول هي الطريقة الثابتة public static void main(String[] args) للتطبيقات الطرفية أو طرق دورة حياة Android Activity للتطبيقات المحمولة.

أنواع البيانات في Java

Java تقسم الأنواع إلى أنواع بدائية (int, double, boolean, char, byte, short, long, float) وأنواع مرجعية (فئات، واجهات، مصفوفات، enum). تُخزَّن البدائيات على المكدس وتُمرَّر بالقيمة. الكائنات في الكومة، تُمرَّر بالمرجع. التحويل التلقائي (autoboxing) يحول البدائي تلقائيًا إلى كائن غلاف (Integer, Double, Boolean)، لكنه ينشئ كائنات إضافية — في Android هذا أمر بالغ الأهمية لأداء واجهة المستخدم.

java
// أمثلة على أنواع البيانات وهياكل Java
public class DataTypes {
    // البدائيات
    int count = 42;
    double price = 19.99;
    boolean isActive = true;
    char grade = 'A';

    // الأنواع المرجعية
    String name = "Android";
    Integer boxed = 100; // autoboxing
    List<String> items = new ArrayList<>();

    // طريقة مع الأدوات الجينية
    public <T> T getFirst(List<T> list) {
        return list.isEmpty() ? null : list.get(0);
    }

    // Enum لمجموعة ثابتة من القيم
    public enum Status {
        PENDING, LOADING, SUCCESS, ERROR
    }
}

الأدوات الجينية List<T> توفر أمانًا نوعيًا للمجموعات. طريقة getFirst تعيد عنصرًا من أي نوع — النوع المحدد يُحدد في نقطة الاستدعاء. يُترجم Enum Status إلى فئة بمجموعة ثابتة من الثوابت، كل مثيل هو singleton. في Android، يُستخدم enum بشكل أقل بسبب استهلاك الذاكرة: يحسّن ProGuard/R8 enum إلى ثوابت int حيثما أمكن.

Java مقابل Kotlin: مقارنة في Android

مقارنة Java و Kotlin لتطوير Android كانت أحد المواضيع الرئيسية منذ 2019، عندما أعلنت Google أن Kotlin هي اللغة ذات الأولوية. Kotlin متوافقة تمامًا مع Java — كلاهما يُترجمان إلى bytecode JVM، يمكنهما استدعاء بعضهما البعض واستخدام نفس المكتبات. ومع ذلك، تختلف طرق كتابة الكود بشكل جذري.

كود القالب

تزيل Kotlin الإسهاب في Java: data class تحل محل 50+ سطرًا من فئة Java مع getters و setters و equals و hashCode و toString و copy. أمان القيم الخالية مدمج في نظام أنواع Kotlin — NullPointerException مستحيلة عمليًا. دوال الامتداد تسمح بإضافة طرق إلى الفئات الموجودة دون وراثة. Smart Casts تحول الأنواع تلقائيًا بعد التحقق.

الجانبJavaKotlin
أمان القيم الخاليةتعليقات @Nullable / @NonNullString? / String — مدمج
Data class50+ سطرًا مع Lombokdata class User(val name: String)
الامتدادفئات أدوات ثابتةfun String.isEmail(): Boolean
CoroutinesAsyncTask / ExecutorServicesuspend + Structured Concurrency
لامداFunctionalInterface + ::methodلامدا افتراضيًا
تعليقات DI@Inject, @Module, @Providesمماثل لكن بكود أقل

الأداء

من حيث الأداء، Java و Kotlin متطابقتان — كلاهما يُترجم إلى bytecode JVM، الذي ينفذه Android ART بنفس الطريقة. الفرق في حجم APK: Kotlin تضيف ~200-400 كيلوبايت لمكتبة kotlin-stdlib. مشاريع Java لها حجم APK أصغر بسبب عدم وجود وقت تشغيل إضافي، لكن عند استخدام Java Stream API و Optional، قد يزيد حجم APK بسبب desugaring.

أدوات مطور Java لنظام Android

أدوات مطور Java لنظام Android تشمل Android Studio و Gradle والملف الشخصي والمحاكي. Android Studio هو IDE الرسمي، المبني على IntelliJ IDEA Community، ويشمل محررًا مع إكمال تلقائي لـ Java، محلل كود (lint)، إعادة هيكلة ومحرر تخطيط بصري (Layout Editor).

الأدوات الرئيسية

Android Gradle Plugin (AGP) الإصدار 8.x يدير البناء: ترجمة Java إلى فئات، desugaring، تصغير ProGuard/R8، التعبئة في APK/AAB. R8 هو desugaring ومبهم محدث، يحل محل ProGuard. يتم تكوين متغيرات البناء (debug/release + product flavors) عبر build.gradle. يُسرع Gradle Daemon عمليات البناء اللاحقة من خلال التخزين المؤقت.

groovy
// build.gradle (app) — تكوين وحدة Java
android {
    compileSdk 34
    defaultConfig {
        applicationId "com.example.myapp"
        minSdk 21
        targetSdk 34
        versionCode 1
        versionName "1.0"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}

dependencies {
    implementation 'androidx.core:core-ktx:1.12.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.11.0'
    testImplementation 'junit:junit:4.13.2'
}

كتلة compileOptions تحدد إصدار Java للترجمة — Java 17 متاح مع AGP 8.x. SDK الأدنى (minSdk) يحدد أقل إصدار Android يعمل عليه التطبيق. Target SDK هو الإصدار الذي اختُبر التطبيق عليه. الفرق بين compileSdk و targetSdk: compileSdk هو API للترجمة، targetSdk هو سلوك وقت التشغيل.

قيود Java في التطوير المحمول

قيود Java في Android أدت إلى انتقال Google إلى Kotlin. NullPointerException هو الاستثناء الأكثر شيوعًا في تطبيقات Java لنظام Android، لأن نظام الأنواع لا يميز بين المراجع القابلة للخالية وغير القابلة للخالية. توصي Google بتعليقات @Nullable و @NonNull من حزمة androidx.annotation، لكن المترجم لا يتحقق منها — فقط lint يفعل ذلك.

غياب coroutines هو قيد آخر: العمليات غير المتزامنة في Java تتطلب استدعاءات رد، AsyncTask (مهمل منذ API 30)، ExecutorService أو RxJava. هذا يؤدي إلى جحيم الاستدعاءات وتسريبات الذاكرة عند تدوير الشاشة. تحل coroutines في Kotlin مع Structured Concurrency هذه المشكلة على مستوى اللغة: يتم إلغاء coroutine عند تدمير Activity دون إدارة يدوية.

كود القالب في Java هو مصدر أخطاء عند كتابة equals/hashCode يدويًا وتنفيذ Parcelable و ViewHolder لـ RecyclerView. مكتبات Android KTX و Jetpack Compose موجهة نحو Kotlin. واجهات برمجة التطبيقات الجديدة لنظام Android (Room, Navigation, Compose) تنشر أمثلة بلغة Kotlin افتراضيًا، على الرغم من وجود إصدارات Java.

الأسئلة المتكررة

ما هي Java؟

Java هي لغة برمجة كائنية التوجه من Sun Microsystems (1995)، تعمل على الآلة الافتراضية JVM. كانت اللغة الرئيسية لـ Android SDK حتى 2019. تُستخدم في التطوير المحمول للمشاريع القديمة والجزء الخادم (Spring) والتطبيقات المؤسسية. تتميز بالكتابة القوية وجمع القمامة التلقائي وتعدد المنصات للbytecode.

لماذا تُعتبر Java لغة قديمة لنظام Android؟

أعلنت Google Kotlin كلغة ذات أولوية لنظام Android في 2019. مكتبات AndroidX الجديدة و Jetpack Compose وتوصيات البنية التحتية والوثائق تُقدم افتراضيًا بلغة Kotlin. تظل Java مدعومة بالكامل، لكن واجهات برمجة التطبيقات تُصمم بنهج Kotlin-first. تتطلب مشاريع Java كود قالب أكثر ولا تحصل على ميزات لغة جديدة أولاً.

ما إصدار Java المستخدم في Android؟

يدعم Android بالكامل Java 8، وجزئيًا Java 11 منذ Android 12+، و Java 17 تجريبيًا عبر desugaring D8. Android Gradle Plugin (AGP) 8.x يترجم bytecode الحديث إلى كود متوافق لواجهات برمجة التطبيقات القديمة عبر desugar. يمكن للمطور الكتابة بلغة Java 11+ باستخدام لامدا و Optional و DateTime API، لكن records و sealed classes متاحة فقط عبر D8.

ما الفرق بين Java و Kotlin؟

Kotlin تتطلب كودًا أقل: data class تحل محل عشرات الأسطر من كود القالب في Java، أمان القيم الخالية مدمج في الأنواع، coroutines تبسط العمليات غير المتزامنة. Java تقدم بناء جملة أبسط للمبتدئين ونظامًا بيئيًا مثبتًا للمكتبات وأدوات مستقرة. أداء وقت التشغيل متطابق — كلاهما يُترجم إلى bytecode JVM يُنفذ بواسطة Android ART.

ما هي بيئات التطوير المستخدمة لتطوير Java لنظام Android؟

Android Studio هو IDE القياسي لتطوير Android مع دعم Java و Kotlin. يتضمن محاكيًا وملفًا شخصيًا (CPU، memory، network) و Layout Inspector و APK Analyzer. IntelliJ IDEA مناسب لـ Java الخادم. Eclipse ADT قديم وغير مدعوم من Google. يوفر Android Studio أيضًا أدوات لترحيل كود Java إلى Kotlin عبر المحول المدمج.

الملخص

  • Java — لغة كائنية التوجه، كانت اللغة الرئيسية لـ Android SDK لمدة 11 عامًا
  • Bytecode JVM يُترجم إلى DEX عبر d8 ويُنفذ بواسطة Android Runtime (ART) مع GC
  • Android يدعم Java 8-17 مع desugaring عبر D8/R8 للتوافق مع الإصدارات السابقة
  • Activity في Java — المكون الأساسي مع دورة حياة onCreate → onStart → onResume → onPause → onStop → onDestroy
  • Gradle — نظام بناء بدعم Java 17 و AGP 8.x ومتغيرات البناء
  • Kotlin — خليفة Java بنفس bytecode لكن ببناء جملة حديث وأمان قيم خالية
  • كود Java القديم يشكل ~35% من مشاريع Android، تواصل Google دعم كلتا اللغتين

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا