آموزش کلید واژه ی this در جاوا

آموزش کلید واژه ی this در جاوا (به زبان ساده)

folderشی گرایی
commentsبدون دیدگاه
اساطیر زبان

در این آموزش با کلید واژه this در جاوا آشنا می شوید؛ چگونه و کجا استفاده شدن آن را با کمک مثال می آموزید.

کلید واژه ی this

در جاوا ، this به شی فعلی موجود در متد ها یا سازنده ها اشاره دارد. بیایید برای اثبات آن مثالی بزنیم.

 


جاوا

توی این پک فوق العاده، جاوا رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، با جاوا اپلیکیشن بزن، پروژه محور یاد بگیر و حسابی پول در بیار! 


 

  1. class MyClass {
  2. int instVar;
  3. MyClass(int instVar){
  4. this.instVar = instVar;
  5. System.out.println(“this reference = ” + this);
  6. }
  7. public static void main(String[] args) {
  8. MyClass obj = new MyClass(8);
  9. System.out.println(“object reference = ” + obj);
  10. }
  11. }

خروجی

this reference = com.ThisAndThat.MyClass@74a14482

object reference = com.ThisAndThat.MyClass@74a14482

توجه کنید که شناسه شیء obj و this یکی است. معنای this چیزی نیست جز اشاره به شی فعلی.

۳ موقعیت وجود دارد که معمولاً از این کلید واژه استفاده می شود.

۱- استفاده از this برای تفکیک منابع مختلف متغیر

در جاوا مجاز به تعریف دو یا چند متغیر با یک نام مشابه در یک دامنه (دامنه کلاس یا دامنه متد) نیستید. با این حال ، متغیرها و پارامترهای نمونه ممکن است دارای نام یکسان باشند. مانند:

class MyClass {

int instVar; // instVar instance variable

MyClass(int instVar){ // instVar parameter

instVar = instVar;

}

}

در برنامه بالا کامپایلر جاوا به دلیل ابهام نام دچار اشتباه می شود. از این رو برای رفع این مشکل از کلید واژه this استفاده می شود.

بیایید یک مثال را بدون استفاده از کلمه کلیدی this ببینیم:

  1. class MyClass {
  2. int instVar;
  3. MyClass(int instVar){
  4. instVar = instVar;
  5. }
  6. public static void main(String[] args) {
  7. MyClass mc = new MyClass(8);
  8. System.out.println(“mc.instVar = ” + mc.instVar);
  9. }
  10. }

خروجی

mc.instVar = 0

ممکن است انتظار داشته باشید که خروجی ۸ باشد ، اما در عوض ۰ را چاپ کرد زیرا کامپایلر جاوا به دلیل ابهام در نام بین متغیر نمونه و پارامتر سازنده اشتباه می کند.

حال ، اجازه دهید کد فوق را بازنویسی کنیم و از کلید واژه ی this برای حل این مسئله استفاده کنیم.

  1. class MyClass{
  2. int instVar;
  3. MyClass(int instVar){
  4. this.instVar = instVar;
  5. }
  6. public static void main(String[] args) {
  7. MyClass obj = new MyClass(8);
  8. System.out.println(“obj.instVar = ” + obj.instVar);
  9. }
  10. }

خروجی

mc.instVar = 8

اکنون ، خروجی مورد انتظار را خواهید گرفت. به این دلیل که وقتی شما یک شیء ایجاد می کنید ، کامپایلر جاوا می داند کدام شیء از سازنده استفاده کرده است.

وقتی کامپایلر جاوا سازنده را فراخوانی می کند ، this در داخل سازنده با شی ای که سازنده را صدا زده جایگزین می شود.

توجه: اگر پارامتری را ارسال کنید که دارای اسم متفاوت از متغیرهای نمونه باشد ، کامپایلر بطور خودکار کلمه کلیدی this را ضمیمه می کند.

این کد

class MyClass {

int instVar;

MyClass(int i) {

instVar = i;

}

}

برابر است با:

class MyClass {

int instVar;

MyClass(int i) {

this.instVar = i;

}

}

یکی دیگر از کاربردهای متداول کلمه کلیدی this در متد های get و set یک کلاس است. مثلا:

  1. class POJO {
  2. String name;
  3. void setName( String name ) {
  4. this.name = name;
  5. }
  6. String getName(){
  7. return this.name;
  8. }
  9. public static void main( String[] args ) {
  10. POJO pojo = new POJO();
  11. pojo.setName(“Toshiba”);
  12. System.out.println(“pojo.name: “+pojo.getName());
  13. }
  14. }

خروجی

pojo.name: Toshiba

۲- استفاده از this در سربارگذاری سازنده ها

در حین کار با سربارگذاری سازنده ها، شاید فراخوانی یک سازنده از سازنده دیگر مفید تر باشد. اما ، سازندگان را نمی توان صریح فراخواند. از این رو ، برای تحقق این هدف می توانید از شکل دیگری از کلمه کلیدی this استفاده کنید. (()this)

شبه کد در اینجا نشان داده شده است:

this(arg-list)

در اینجا نحوه استفاده از this در فراخوانی سازنده آمده است.

  1. class Complex {
  2. private int a, b;
  3. // parameterize constructor
  4. private Complex( int i, int j ){
  5. this.a = i;
  6. this.b = j;
  7. }
  8. private Complex(int i){
  9. this(i, i); // invokes Complex(int i, int j);
  10. }
  11. private Complex(){
  12. this(0); // invokes Complex(int i);
  13. }
  14. @Override
  15. public String toString(){
  16. return this.a + ” + ” + this.b + “i”;
  17. }
  18. public static void main( String[] args ) {
  19. Complex c1 = new Complex(2, 3);
  20. Complex c2 = new Complex(3);
  21. Complex c3 = new Complex();
  22. System.out.println(c1);
  23. System.out.println(c2);
  24. System.out.println(c3);
  25. }
  26. }

خروجی

۲ + ۳i

۳ + ۳i

۰ + ۰i

در برنامه بالا ، مهم نیست که در هنگام معرفی شیء کدام سازنده فراخوانی می شود ، در نهایت سازنده پارامتری صدا زده می شود.

هنگام استفاده از ()this باید مراقب باشید. سازنده هایی که ()this را صدا می زنند به کندی اجرا می شوند زیرا صدا زدن سازنده اضافه دیگر سربار اضافه می کند. اگر کلاس شما فقط برای ایجاد تعداد انگشت شماری از اشیاء استفاده می شود ، استفاده از ()this مفید است. یکی دیگر از مزیت های بزرگ استفاده از ()this کاهش میزان کد کپی و تکراری است.

۳- ارسال this به عنوان آرگومان

اگر لازم است شیء فعلی را به عنوان یک آرگومان به یک متد منتقل کنید ، می توانید از this استفاده کنید.

  1. class ThisExample {
  2. int x;
  3. int y;
  4. ThisExample(int x, int y) {
  5. this.x = x;
  6. this.y = y;
  7. System.out.println(“Before passing this to addTwo() method:”);
  8. System.out.println(“x = ” + this.x + “, y = ” + this.y);
  9. addTwo(this);
  10. System.out.println(“After passing this to addTwo() method:”);
  11. System.out.println(“x = ” + this.x + “, y = ” + this.y);
  12. }
  13. void addTwo(ThisExample o){
  14. o.x += 2;
  15. o.y += 2;
  16. }
  17. }
  18. class Demo {
  19. public static void main( String[] args ) {
  20. ThisExample obj = new ThisExample(1, -2);
  21. }
  22. }

خروجی

Before passing this to addTwo() method:

x = 1, y = -2

After passing this to addTwo() method:

x = 3, y = 0

در اینجا ، متد ()addTwo با this به عنوان یک آرگومان از داخل سازنده صدا زده می شود.

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست