English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليميات Java الأساسية

Java تحكم العملية

Java مصفوفة

Java موجهات الأهداف (I)

Java موجهات الأهداف (II)

Java موجهات الأهداف (III)

معالجة الاستثناءات في Java

Java قائمة (List)

Java Queue (الطابور)

مجموعات Java Map

مجموعات Java Set

مدخلات/مدخلات Java (I/O)

قراء/كتابة Java

مواضيع أخرى في Java

كلمة this في Java

في هذا المقال، سنكتشف من خلال الأمثلة كيفية وكيفية استخدام كلمة المفتاح this في Java، وأين يمكن استخدامها.

كلمة المفتاح this

في Java، يتم استخدام كلمة المفتاح this لاستدلال الهدف الحالي في الطريقة أو بناء الجسم. على سبيل المثال،

class Main {
    int المتغيرالنموذجي;
    الجسم(int المتغيرالنموذجي){
        هذا.المتغيرالنموذجي = المتغيرالنموذجي;
        System.out.println("استدلال this= " + this);
    }
    الوظيفة العامة الثابتة void رئيسي(String[] الأنصاف) {
        الجسم الرئيسي = جديد الجسم(8);
        System.out.println("استدلال الهدف= " + obj);
    }
}

الإخراج

استدلال this = com.ThisAndThat.MyClass@74a14482
استدلال الهدف = com.ThisAndThat.MyClass@74a14482

في المثال السابق، قمنا بإنشاء هدف من الفئة Main يُدعى obj. ثم، قمنا بطباعة استدلال الهدف من الفئة obj وكلمة المفتاح this.

في هذا المكان، يمكننا رؤية أن obj وthis يشيران إلى نفس الرقم. مما يعني أن هذا مجرد استدلال على الهدف الحالي.

استخدام كلمة المفتاح this

في جميع الحالات، يتم استخدام كلمة المفتاح this عادةً.

معالجة عدم وضوح الاسم باستخدام هذا الأسلوب

في Java، لا يُسمح بتحديد متغيرين أو أكثر يحملان نفس الاسم في نطاق (نطاق الفئة أو نطاق الطريقة). ولكن، يمكن أن يكون الاسم نفسه للمتغيرات النموذجية والمعلمات. على سبيل المثال،

class MyClass {
    // المتغيرات النموذجية
    يساوي:
    // المعلمات
    MyClass(int العمر){
        العمر = العمر;
    }
}

في البرنامج السابق، كانت المتغيرات النموذجية والمعلمات تحمل نفس الاسم: العمر. هنا، يعاني ملاحظة Java من عدم وضوح الاسم.

في هذه الحالة، نستخدم كلمة المفتاح this. على سبيل المثال،

دعونا أولاً نرى مثالاً لا يستخدم كلمة المفتاح this:

class Main {
    يساوي:
    الجسم(int العمر){
        العمر = العمر;
    }
    الوظيفة العامة الثابتة void رئيسي(String[] الأنصاف) {
        الجسم الرئيسي = جديد الجسم(8);
        System.out.println("obj.age = " + obj.age);
    }
}

الإخراج

mc.العمر = 0;

في المثال السابق، قمنا بتقديم قيمة 8 إلى بناء الجسم. ولكن، الناتج هو 0. هذا لأن ملاحظة Java تعاني من عدم وضوح الاسم بين المتغيرات النموذجية والمعلمات.

الآن، دعونا نعيد كتابة الكود السابق باستخدام كلمة المفتاح this.

class Main {
    يساوي:
    الجسم(int العمر){
        هذا.العمر = العمر;
    }
    الوظيفة العامة الثابتة void رئيسي(String[] الأنصاف) {
        الجسم الرئيسي = جديد الجسم(8);
        System.out.println("obj.age = " + obj.age);
    }
}

الإخراج

System.out.println("obj.age = " + obj.age);

obj.age = 8

الآن، نحصل على الناتج المتوقع. هذا لأنه عند استدعاء بناء المصفوفة، يتم استبدال محتويات بناء المصفوفة بمحتوى بناء المصفوفة الذي يتم استدعاؤه من قبل الكائن obj. لذلك، يتم تعيين متغير age إلى 8.

class Main {
    يساوي:
    int age;
        إضافةً إلى ذلك، إذا كانت أسماء المعاملات وأسماء المتغيرات المحددة مختلفة، فإن المترجم يضيف كلمة this تلقائيًا. على سبيل المثال، كود:
    }
}

age = i;

class Main {
    يساوي:
    int age;
        Main(int i) {
    }
}

this.age = i;

استخدام this في methods getters و settersmethods getters و settersمثالًا:

class Main {
   String name;
   //method setter
   void setName(String name) {
       this.name = name;
   }
   //method getter
   String getName(){
       return this.name;
   }
   public static void main(String[] args) {
       Main obj = new Main();
       //استدعاء methods getters و setters
       obj.setName("Seagull");
       System.out.println("obj.name: " + obj.getName());
   }
}

الإخراج

obj.name: Seagull

في هذا السياق، نستخدم كلمة this:

  • استخدام setters لتخصيص القيم

  • استخدام getters لاسترجاع القيم

استخدام this في بناء المصفوفة المزدوجة

عند التعامل مععند بناء مصفوفة مزدوجةقد نضطر إلى استدعاء بناء مصفوفة من بناء مصفوفة أخرى. في هذه الحالة، لا يمكننا استدعاء بناء المصفوفة بشكل مباشر. بدلاً من ذلك، يجب استخدام كلمة this.

في هذا السياق، نستخدم شكلًا آخر من كلمة this، وهو this().

class Complex {
    private int a, b;
    //بناء المصفوفة باستخدام معاملين
    private Complex(int i, int j){
        this.a = i;
        this.b = j;
    }
    //بناء المصفوفة باستخدام معامل واحد
    private Complex(int i){
        //استدعاء بناء المصفوفة باستخدام معاملين
        this(i, i); 
    }
    //بناء المصفوفة بدون معامل
    private Complex(){
        //استدعاء بناء المصفوفة باستخدام معامل واحد
        this(0);
    }
    @Override
    public String toString(){}
        return this.a + " + " + this.b + "i";
    }
    public static void main(String[] args) {
  
                //إنشاء جسم للبنية Complex
                //استدعاء بنية باستخدام معاملين 
        Complex c1 = new Complex(2، 3); 
    
        //استدعاء بنية باستخدام معامل واحد
        Complex c2 = new Complex(3);
        //استدعاء بنية بدون معاملات
        Complex c3 = new Complex();
        //طباعة الجسم
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
    }
}

الإخراج

2 + 3i
3 + 3i
0 + 0i

في المثال السابق، استخدمنا كلمة المفتاح this،

  • من بنية Complex(int i) إلى بنية Complex(int i،int j)

  • من بنية Complex() إلى بنية Complex(int i)

ملاحظة هذا السطر،

System.out.println(c1);

في هذا المكان، عندما نقوم بطباعة الجسم c1، يتم تحويل الجسم إلى سلسلة. خلال هذه العملية، سيتم استدعاء toString(). لأننا قد كتبنا طريقة toString() في البنية، نحصل على الناتج من هذه الطريقة.

 أحد أكبر مزايا this() هو تقليل كمية الكود المكرر. ولكن، يجب أن نكون حذرين عند استخدام this().

 ذلك لأن استدعاء بنية أخرى من بنية أخرى يزيد من الكلفة، وهو عملية بطيئة. أحد أكبر مزايا استخدام this() هو تقليل كمية الكود المكرر.

ملاحظةمن خلال استدعاء بنية أخرى من بنية أخرى يُدعى إستدعاء بنية صريح.

تقديم this كمعامل

يمكننا استخدام كلمة المفتاح this لتقديم الجسم الحالي كمعامل للطريقة. على سبيل المثال،

class ThisExample {
    //تقرير المتغيرات
    int x;
    int y;
    ThisExample(int x, int y) {
          //تعيين القيم للمتغيرات داخل البنية
        this.x = x;
        this.y = y;
        //قيمة x و y قبل استدعاء add()
        System.out.println("قبل انتقال this إلى طريقة addTwo():")
        System.out.println("x = " + this.x + ", y = " + this.y);}}
        //استدعاء طريقة add()، وتقديم this كمعامل
        add(this);
        //قيمة x و y بعد استدعاء add()
        System.out.println("بعد از انتقال this إلى طريقة addTwo():")
        System.out.println("x = " + this.x + ", y = " + this.y);}}
    }
    void add(ThisExample o){
        o.x += 2;
        o.y += 2;
    }
}
class Main {
    public static void main(String[] args) {
        ThisExample obj = new ThisExample(1, -2);
    }
}

الإخراج

قبل تمرير this إلى طريقة addTwo()،
x = 1, y = -2
بعد تمرير this إلى طريقة addTwo()،
x = 3, y = 0

في المثال السابق، انتبه إلى السطر التالي في بناء هذا المثال ThisExample()،

add(this);

في هذا المكان، نحن نستدعي طريقة add() عن طريق تمرير this كمعامل. لأن كلمة المفتاح this تحتوي على مرجع إلى عنصر الكائن obj للفئة، نستطيع تغيير قيم x و y في طريقة add().