إعلان
تعلم الآن

لم أفهم كود المزامنة في جافا

السلام عليكم، لدي بعض التشويش في المزامنة.

هناك بعض الأشياء غير واضحة بالنسبة لي، أجد بعض الصعوبة في هذا المثال:

import java.io.File;           // File هنا قمنا باستدعاء الكلاس
import java.io.FileInputStream;     // FileInputStream هنا قمنا باستدعاء الكلاس
import java.io.FileOutputStream;     // FileOutputStream هنا قمنا باستدعاء الكلاس
import java.io.ObjectInputStream;    // ObjectInputStream هنا قمنا باستدعاء الكلاس
import java.io.ObjectOutputStream;    // ObjectOutputStream هنا قمنا باستدعاء الكلاس
import java.io.IOException;       // IOException هنا قمنا باستدعاء الكلاس
 
public class Main {
 
  public static void main(String[] args) {
 
    // e إسمه Editor في كل مرة نقوم فيها بتشغيل البرنامج سيتم إنشاء كائن من الكلاس
    Editor e = new Editor();
 
    // لمعرفة إذا كان يوجد ملف يحفظ حالة الكائن أم لا user-prefrences.ser بعدها سيتم البحث عن الملف
    if ( new File("./user-prefrences.ser").exists() )
    {
      // منه e موجوداً سيحاول البرنامج إستعادة حالة الكائن user-prefrences.ser في حال كان الملف
      try
      {
        // في الذاكرة user-prefrences.ser حتى نستطيع إدخال المعلومات الموجودة في الملف FileInputStream هنا قمنا بإنشاء كائن نوعه
        FileInputStream fis = new FileInputStream("./user-prefrences.ser");
 
        // في الذاكرة user-prefrences.ser المحفوظ في الملف Editor لنتمكن من إعادة خلق كائن الـ ObjectInputStream هنا قمنا بإنشاء كائن نوعه
        ObjectInputStream ois = new ObjectInputStream(fis);
 
        // e و قمنا بتخزين حالته في الكائن Editor هنا قمنا بقراءة حالة الكائن الذي تم خلقه في الذاكرة ككائن من الكلاس
        e = (Editor) ois.readObject();
 
        // user-prefrences.ser في الأخير قمنا بقطع كل إتصال قمنا بإجرائه مع الملف
        fis.close();
        ois.close();
 
        // في حال عدم حدوث أي خطأ, سيتم طباعة الجملة التالية التي تعني أن العملية تمت بنجاح
        System.out.println("Deserialized data has been created in the memory");
        System.out.println("Language:   " + e.language);
        System.out.println("Encoding:   " + e.encoding);
        System.out.println("Font size:   " + e.fontSize);
        System.out.println("Font family:  " + e.fontFamily);
        System.out.println("Auto save:   " + e.autoSave);
        System.out.println("Direction:   " + e.direction);
        System.out.println("Auto Complete: " + e.autoComplete);
        System.out.println();
      }
      catch(IOException | ClassNotFoundException ex)
      {
        // في حال حدوث أي خطأ عند محاولة إسترجاع حالة الكائن سيتم عرضعه
        System.out.println(ex.getMessage());
      }
    }
 
    // user-prefrences.ser و حفظها في ملف جديد إسمه e هنا حاولنا تغيير حالة الكائن
    try
    {
      // ( أي قمنا بتغيير إعدادات البرنامج ) e هنا قمنا بتغيير قيم الكائن
      e.language  = "arabic";
      e.encoding  = "utf-8";
      e.fontSize  = "12pt";
      e.fontFamily = "tahoma";
      e.autoSave  = true;
      e.direction = "right to left";
 
      // .ser إمتداده ,user-prefrences.ser هنا قمنا بإنشاء ملف إسمه
      FileOutputStream fos = new FileOutputStream("./user-prefrences.ser");
 
      // user-prefrences.ser لنتمكن من استخراج حالة أي كائن موجود في الذاكرة و وضعها في الملف ObjectOutputStream هنا قمنا بإنشاء كائن نوعه
      ObjectOutputStream oos = new ObjectOutputStream(fos);
 
      // لحفظ الإعدادات التي قمنا بإدخالها user-prefrences.ser في الملف e هنا قمنا بنسخ حالة الكائن
      oos.writeObject(e);
 
      // user-prefrences.ser في الأخير قمنا بقطع كل إتصال قمنا بإجرائه مع الملف
      oos.close();
      fos.flush();
      fos.close();
 
      // في حال عدم حدوث أي خطأ, سيتم طباعة الجملة التالية التي تعني أن العملية تمت بنجاح
      System.out.println("Serialized data has been saved in the project in a file called user-prefrences.ser");
    }
    catch(IOException ex)
    {
      // في حال حدوث أي خطأ عند نسخ البيانات من الذاكرة إلى الملف سيتم عرضه
      System.out.println(ex.getMessage());
    }
 
  }
 
}

مشكلتي في الكود سطر 17 الذي هو:

if ( new File("./user-prefrences.ser").exists() )


1- كيف تم إنشاء كائن بدون إسم داخل شرط؟ لم أتذكر انني درست هذا الموضوع في الموقع. و إذا كان موجود في الموقع، أرجو وضع رابط الدرس فربما نسيته.

2- كيف تم استدعاء دالة داخل الشرط بدون ذكر إسم الكائن؟ كذلك لا أتذكر أنني درست هذا الأمر.

3- كيف كتبنا شرط بدون استخدام أي عامل مقارنة (Comparison Operators)؟

4- كيف عرف مفسر الكود أن العبارة الشرطية if هي true أو false لأننا لم نحدده؟

شكراً لك على الجواب، و أتمنى أن تعذرني إذا كانت الاسئلة غبية لأنني لا زلت أتعلم و أجد صعوبة كثيرة في موضوع المزامنة؟


إجابات 1

أضف إجابة

يجب تسجيل الدخول حتى تتمكن من إضافة إجابة أو رد.
إعلان
دورة قواعد بيانات MySQL في هذه الدورة ستتعلم أساسيات قواعد البيانات و أوامر SQL، العلاقات (Join) بين الجداول، Normalization مع تطبيق مشروع متكامل. سعر الدورة الآن هو 20 ريال سعودي فقط بدلاً من 600 ريال
سعر الدورة الآن هو 20 ريال سعودي فقط بدلاً من 600 ريال
تعلم الآن

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة