logo

هذه الكلمة الأساسية في جافا

يمكن أن يكون هناك الكثير من الاستخدام جافا هذه الكلمة الأساسية . في جافا، هذا هو المتغير المرجعي الذي يشير إلى الكائن الحالي.

جافا هذه الكلمة الرئيسية

استخدام جافا هذه الكلمة الأساسية

هنا يتم إعطاء استخدام 6 لجافا هذه الكلمة الأساسية.

  1. يمكن استخدام هذا للإشارة إلى متغير مثيل الفئة الحالية.
  2. يمكن استخدام هذا لاستدعاء طريقة الفصل الحالية (ضمنيًا)
  3. يمكن استخدام this() لاستدعاء مُنشئ الفئة الحالية.
  4. يمكن تمرير هذا كوسيطة في استدعاء الأسلوب.
  5. يمكن تمرير هذا كوسيطة في استدعاء المنشئ.
  6. يمكن استخدام هذا لإرجاع مثيل الفئة الحالية من الطريقة.

اقتراح: إذا كنت مبتدئًا في استخدام لغة Java، فابحث عن ثلاثة استخدامات فقط لهذه الكلمة الأساسية.

استخدام جافا هذه الكلمة الأساسية

1) هذا: للإشارة إلى متغير مثيل الفئة الحالية

يمكن استخدام الكلمة الأساسية هذه للإشارة إلى متغير مثيل الفئة الحالية. إذا كان هناك غموض بين متغيرات المثيل والمعلمات، فإن هذه الكلمة الأساسية تحل مشكلة الغموض.

فهم المشكلة بدون هذه الكلمة الأساسية

دعونا نفهم المشكلة إذا لم نستخدم هذه الكلمة الرئيسية من خلال المثال الموضح أدناه:

ما الذي يجعل جهاز الكمبيوتر سريعا
 class Student{ int rollno; String name; float fee; Student(int rollno,String name,float fee){ rollno=rollno; name=name; fee=fee; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis1{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }} 
اختبره الآن

انتاج:

 0 null 0.0 0 null 0.0 

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

حل المشكلة المذكورة أعلاه عن طريق هذه الكلمة الأساسية

 class Student{ int rollno; String name; float fee; Student(int rollno,String name,float fee){ this.rollno=rollno; this.name=name; this.fee=fee; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis2{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }} 
اختبره الآن

انتاج:

 111 ankit 5000.0 112 sumit 6000.0 

إذا كانت المتغيرات المحلية (الوسائط الرسمية) ومتغيرات الحالة مختلفة، ليست هناك حاجة لاستخدام هذه الكلمة الأساسية كما هو الحال في البرنامج التالي:

البرنامج حيث هذه الكلمة الرئيسية غير مطلوبة

 class Student{ int rollno; String name; float fee; Student(int r,String n,float f){ rollno=r; name=n; fee=f; } void display(){System.out.println(rollno+' '+name+' '+fee);} } class TestThis3{ public static void main(String args[]){ Student s1=new Student(111,'ankit',5000f); Student s2=new Student(112,'sumit',6000f); s1.display(); s2.display(); }} 
اختبره الآن

انتاج:

 111 ankit 5000.0 112 sumit 6000.0 

من الأفضل استخدام أسماء ذات معنى للمتغيرات. لذلك نستخدم نفس الاسم للمتغيرات والمعلمات في الوقت الفعلي، ونستخدم دائمًا هذه الكلمة الأساسية.


2) هذا: لاستدعاء طريقة الفئة الحالية

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

 class A{ void m(){System.out.println('hello m');} void n(){ System.out.println('hello n'); //m();//same as this.m() this.m(); } } class TestThis4{ public static void main(String args[]){ A a=new A(); a.n(); }} 
اختبره الآن

انتاج:

 hello n hello m 

3) this() : لاستدعاء مُنشئ الفئة الحالية

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

مثال على تقليم ألفا بيتا

استدعاء المنشئ الافتراضي من المنشئ ذو المعلمات:

 class A{ A(){System.out.println('hello a');} A(int x){ this(); System.out.println(x); } } class TestThis5{ public static void main(String args[]){ A a=new A(10); }} 
اختبره الآن

انتاج:

 hello a 10 

استدعاء المُنشئ ذو المعلمات من المُنشئ الافتراضي:

 class A{ A(){ this(5); System.out.println('hello a'); } A(int x){ System.out.println(x); } } class TestThis6{ public static void main(String args[]){ A a=new A(); }} 
اختبره الآن

انتاج:

 5 hello a 

الاستخدام الحقيقي لاستدعاء المنشئ () هذا

يجب استخدام استدعاء المنشئ this() لإعادة استخدام المنشئ من المنشئ. يحافظ على السلسلة بين المنشئين، أي يتم استخدامه لتسلسل المنشئ. دعونا نرى المثال الموضح أدناه والذي يعرض الاستخدام الفعلي لهذه الكلمة الرئيسية.

 class Student{ int rollno; String name,course; float fee; Student(int rollno,String name,String course){ this.rollno=rollno; this.name=name; this.course=course; } Student(int rollno,String name,String course,float fee){ this(rollno,name,course);//reusing constructor this.fee=fee; } void display(){System.out.println(rollno+' '+name+' '+course+' '+fee);} } class TestThis7{ public static void main(String args[]){ Student s1=new Student(111,'ankit','java'); Student s2=new Student(112,'sumit','java',6000f); s1.display(); s2.display(); }} 
اختبره الآن

انتاج:

واجهة في جافا
 111 ankit java 0.0 112 sumit java 6000.0 

القاعدة: استدعاء هذا () يجب أن يكون البيان الأول في المنشئ.

 class Student{ int rollno; String name,course; float fee; Student(int rollno,String name,String course){ this.rollno=rollno; this.name=name; this.course=course; } Student(int rollno,String name,String course,float fee){ this.fee=fee; this(rollno,name,course);//C.T.Error } void display(){System.out.println(rollno+' '+name+' '+course+' '+fee);} } class TestThis8{ public static void main(String args[]){ Student s1=new Student(111,'ankit','java'); Student s2=new Student(112,'sumit','java',6000f); s1.display(); s2.display(); }} 
اختبره الآن

انتاج:

 Compile Time Error: Call to this must be first statement in constructor 

4) هذا: لتمريره كوسيطة في الطريقة

يمكن أيضًا تمرير الكلمة الأساسية this كوسيطة في الطريقة. يتم استخدامه بشكل رئيسي في التعامل مع الأحداث. دعونا نرى المثال:

 class S2{ void m(S2 obj){ System.out.println('method is invoked'); } void p(){ m(this); } public static void main(String args[]){ S2 s1 = new S2(); s1.p(); } } 
اختبره الآن

انتاج:

 method is invoked 

تطبيق هذا الذي يمكن تمريره كوسيطة:

في التعامل مع الأحداث (أو) في موقف يتعين علينا فيه تقديم مرجع لفئة إلى فئة أخرى. يتم استخدامه لإعادة استخدام كائن واحد بعدة طرق.


5) هذا: لتمريره كوسيطة في استدعاء المنشئ

يمكننا تمرير الكلمة الأساسية this في المُنشئ أيضًا. يكون مفيدًا إذا كان علينا استخدام كائن واحد في فئات متعددة. دعونا نرى المثال:

سلسلة جافا في الصفيف
 class B{ A4 obj; B(A4 obj){ this.obj=obj; } void display(){ System.out.println(obj.data);//using data member of A4 class } } class A4{ int data=10; A4(){ B b=new B(this); b.display(); } public static void main(String args[]){ A4 a=new A4(); } } 
اختبره الآن
 Output:10 

6) يمكن استخدام هذه الكلمة الأساسية لإرجاع مثيل الفصل الحالي

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

بناء جملة هذا الذي يمكن إرجاعه كبيان

 return_type method_name(){ return this; } 

مثال على هذه الكلمة الأساسية التي تُرجعها كعبارة من الطريقة

 class A{ A getA(){ return this; } void msg(){System.out.println('Hello java');} } class Test1{ public static void main(String args[]){ new A().getA().msg(); } } 
اختبره الآن

انتاج:

 Hello java 

إثبات هذه الكلمة الأساسية

لنثبت أن هذه الكلمة الأساسية تشير إلى متغير مثيل الفئة الحالي. في هذا البرنامج، نقوم بطباعة المتغير المرجعي وتكون مخرجات كلا المتغيرين متساوية.

 class A5{ void m(){ System.out.println(this);//prints same reference ID } public static void main(String args[]){ A5 obj=new A5(); System.out.println(obj);//prints the reference ID obj.m(); } } 
اختبره الآن

انتاج:

 A5@22b3ea59 A5@22b3ea59