JavaRush /وبلاگ جاوا /Random-FA /کلمه کلیدی این {در مثالها}

کلمه کلیدی این {در مثالها}

در گروه منتشر شد
در JavaRush، دانش آموزان به معنای واقعی کلمه از اولین سخنرانی ها با کلمه کلیدی آشنا می شوند this. و با گذشت زمان مشخص می شود که چه معنایی دارد. اما بسیاری، با نگاهی به گذشته، احتمالاً صادقانه با خود خواهند گفت که برای مدت طولانی نمی توانند ذن این کلمه کلیدی را درک کنند. در این مقاله ما پرده اسرار استفاده از کلمات کلیدی را thisبرای کسانی که هنوز نمی توانند آن را بفهمند برمی داریم... خوش آمدید! اگر کتاب مرجع جاوا Schildt را بردارید ، در صفحه 171 خواهید خواند که یک کلمه کلیدی thisلازم است تا یک روش بتواند به شیئی که آن را فراخوانی کرده است ارجاع دهد. این در واقع می تواند پایان آن باشد. اما ما نیاز به جزئیات داریم. کلمه کلیدی این {در مثالها} - 1به عنوان یک قاعده، thisباید در دو مورد استفاده شود:
  1. هنگامی که یک متغیر نمونه کلاس و یک متغیر متد/سازنده نام یکسانی دارند.
  2. زمانی که نیاز دارید سازنده ای از یک نوع (مثلاً سازنده پیش فرض یا پارامتری) را از دیگری فراخوانی کنید. به این فراخوانی سازنده صریح نیز می گویند.
همین است، واقعاً زیاد نیست، فقط در دو مورد از این کلمه کلیدی مخوف استفاده شده است. حال بیایید با مثال به این دو موقعیت نگاه کنیم.

مثال اول - متغیر نمونه و متغیر متد یک نام دارند

فرض کنید یک کلاس داریم Humanکه فیلد "name" برای آن تعریف شده است: کلمه کلیدی این {در مثالها} - 2بیایید nameیک setter برای متغیر ایجاد کنیم (setter کاملاً کار می کند و هیچ ترفندی در اینجا وجود ندارد): لطفاً توجه داشته باشید که متغیر را کلمه کلیدی این {در مثالها} - 3به متد (setter) می setNameدهیم. ) String newName. ما یک متغیر جدید معرفی کردیم و (به طور کلی) می‌توانیم آن را هر چه می‌خواهیم بنامیم، زیرا فقط در {پرانتزهای فرفری} متد قابل مشاهده است setName. توجه داشته باشید که یک خط در تنظیم کننده وجود دارد:
name = newName;
یعنی در واقع ما یک متغیر جدید معرفی کردیم newNameو آن را به متغیری که قبلاً در کلاس وجود داشت نسبت دادیم name. بسیاری از برنامه نویسان تصور می کردند که معرفی یک متغیر با نام جدید عجیب است اگر در پایان ما در مورد همان چیزی صحبت می کنیم. Humanدر مورد نام در کلاس بنابراین، توسعه دهندگان زبان به این فکر کردند که استفاده از یک نام متغیر را راحت کنند. به عبارت دیگر، چرا باید دو نام برای یک متغیر به معنای یکسان باشد. یعنی من می خواهم این کار را انجام دهم: کلمه کلیدی این {در مثالها} - 4اما در این صورت یک مشکل پیش می آید . اکنون دو متغیر داریم که یکسان نامگذاری شده اند. یکی String nameبه کلاس Humanو دیگری String nameبه متد آن تعلق دارد setName. بنابراین، ماشین جاوا هنگام نوشتن یک رشته در یک ستتر نمی داند که منظور شما کدام متغیر است:
name = name;
جاوا نزدیکترین را می گیرد - nameاز روش setName:
کلمه کلیدی این {در مثالها} - 5
و معلوم می شود که شما به سادگی به یک متغیر nameاز این متد، مقداری را به آن اختصاص می دهید. که البته منطقی نیست بنابراین راهی برای تشخیص متغیر nameاز یک کلاس Humanاز یک متغیر nameاز یک متد لازم بود setNameکه برای حل این مشکل کلمه کلیدی معرفی شد thisکه در این صورت نشان می دهد که لازم است یک متغیر نه از یک متد، بلکه فراخوانی شود. از یک کلاس Human:
کلمه کلیدی این {در مثالها} - 6
یعنی همان thisطور که در ابتدای مقاله گفته شد به شیء فراخوان اشاره خواهد کرد. در نتیجه، نام شخص setNameاز طریق تنظیم کننده به شی ایجاد شده تنظیم می شود. در زیر کد بدون استفاده از کلمه کلیدی آمده است this. کد یک شی کلاس ایجاد می کند Humanو به آن نام می دهد:
کلمه کلیدی این {در مثالها} - 7
و در زیر کد برنامه با کلمه کلیدی this:
public class Solution{
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Volodya");
        human1.print();
    }
}
class Human{
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    void print(){
        System.out.println(name);
    }
}
بنابراین، thisاز معرفی متغیرهای جدید برای نشان دادن یک چیز اجتناب می‌کند، که باعث می‌شود کد با متغیرهای اضافی کمتر "بارگذاری" شود.

مثال دوم - استفاده از این برای فراخوانی صریح یک سازنده

فراخوانی یک سازنده از سازنده دیگر زمانی می تواند مفید باشد که شما (به اندازه کافی عجیب) چندین سازنده دارید و نمی خواهید کد اولیه سازی که قبلا در سازنده داده شده بود را در یک سازنده جدید بازنویسی کنید. سردرگم؟ همه چیز آنقدرها که به نظر می رسد ترسناک نیست. به کد زیر نگاه کنید، دو سازنده کلاس دارد Human:
class Human{
    int age;
    int weight;
    int height;

    Human(int age, int weight){
        this.age = age;
        this.weight = weight;
    }
    Human(int age, int weight, int height){
        //you call the constructor with two parameters
        this(age, weight);
        //and add the missing variable
        this.height = height;
    }
}
در اینجا ابتدا یک سازنده دو پارامتری داریم که int ageو int weight. فرض کنید ما دو خط کد در آن نوشتیم:
this.age = age;
this.weight = weight;
و سپس تصمیم گرفتند یک سازنده دیگر با سه پارامتر اضافه کنند که علاوه بر سن و وزن، قد را نیز می گیرد. در سازنده جدید می توانید این را بنویسید:
this.age = age;
this.weight = weight;
this.height = height;
اما به جای تکرار کدی که قبلاً در این سازنده نوشته اید، می توانید از یک کلمه کلیدی برای thisفراخوانی صریح سازنده با دو پارامتر استفاده کنید:
this(age, weight);
// and add the missing variable:
this.height = height;
بنابراین شما به نوعی به سازنده با سه پارامتر می گویید:
  • این سازنده را که دو پارامتر دارد فراخوانی کنید.
  • و متغیر گم شده را اضافه کنید.
همین =). در نهایت، توجه می کنیم که این کلمه کلیدی در جاوا فقط به عنوان بخشی از متدها یا سازنده های یک نمونه کلاس استفاده می شود. اما به طور ضمنی، کلمه کلیدی thisبه همه روش‌ها به جز روش‌های استاتیک ارسال می‌شود (به همین دلیل thisاغلب به آن پارامتر ضمنی می‌گویند) و می‌توان از آن برای اشاره به شیئی که متد را فراخوانی می‌کند استفاده کرد. نیازی به ترس از این کلمه کلیدی نیست، زیرا Thisترسناک نیست.
کلمه کلیدی این {در مثالها} - 9
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION