JavaRush /وبلاگ جاوا /Random-FA /روش ها، پارامترهای آنها، تعامل و بارگذاری بیش از حد

روش ها، پارامترهای آنها، تعامل و بارگذاری بیش از حد

در گروه منتشر شد
دوباره سلام! در آخرین سخنرانی با کلاس ها و سازنده ها آشنا شدیم و یاد گرفتیم که چگونه خودمان را ایجاد کنیم. روش ها، پارامترهای آنها، تعامل و اضافه بار - 1امروز ما نگاهی دقیق تر به بخش جدایی ناپذیر کلاس ها به عنوان متدها خواهیم داشت. متد مجموعه ای از دستورات است که به شما اجازه می دهد تا عملیاتی را در یک برنامه انجام دهید. به عبارت دیگر، یک متد یک تابع است. کاری که کلاس شما می تواند انجام دهد. در زبان های برنامه نویسی دیگر، متدها اغلب به نام "توابع" نامیده می شوند، اما در جاوا کلمه "متد" محبوبیت بیشتری پیدا کرده است :) در سخنرانی آخر، اگر یادتان باشد، ما روش های ساده ای را برای کلاس Cat ایجاد کردیم تا گربه های ما بتوانند میو کنند. و پرش:
public class Cat {

    String name;
    int age;

    public void sayMeow() {
        System.out.println("Meow!");
    }

    public void jump() {
        System.out.println("Jumping gallop!");
    }

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = "Barsik";

        barsik.sayMeow();
        barsik.jump();
    }
}
sayMeow()و jump()متدهای کلاس ما هستند. نتیجه کار آنها خروجی کنسول است:
Мяу!
Прыг-скок!
روش های ما بسیار ساده هستند: آنها به سادگی متن را در کنسول چاپ می کنند. اما در جاوا، متدها یک وظیفه اصلی دارند - آنها باید اقداماتی را روی داده های یک شی انجام دهند . مقدار داده های یک شی را تغییر دهید، آن را تبدیل کنید، آن را به کنسول خروجی دهید، یا کار دیگری با آن انجام دهید. روش‌های فعلی ما هیچ کاری با داده‌های شی انجام نمی‌دهند Cat. بیایید به یک مثال واضح تر نگاه کنیم:
public class Truck {

    int length;
    int width;
    int height;
    int weight;

    public int getVolume() {
        int volume = length * width * height;
        return volume;
    }
}
به عنوان مثال، ما یک کلاس داریم که یک کامیون را نشان می دهد - Truck. یک تریلر کامیون دارای طول، عرض و ارتفاع و وزن است (این مورد بعداً مورد نیاز خواهد بود). در روش، getVolume()ما محاسبات را انجام می دهیم - داده های جسم خود را به عددی تبدیل می کنیم که حجم را نشان می دهد (طول، عرض و ارتفاع را ضرب می کنیم). این عددی است که نتیجه روش خواهد بود. لطفا توجه داشته باشید - در توضیحات روش نوشته شده است public int getVolume. به این معنی که نتیجه این روش باید یک عدد در فرم باشد int. ما نتیجه متد را محاسبه کرده ایم و اکنون باید آن را به برنامه خود که متد را نامیده است برگردانیم . برای برگرداندن نتیجه یک متد در جاوا از کلمه کلیدی استفاده می شود return.
return volume;

پارامترهای روش

متدها می توانند مقادیری را به عنوان ورودی بپذیرند که به آنها "پارامترهای روش" می گویند. روش فعلی ما getVolume()در کلاس Truckهیچ پارامتری را نمی پذیرد، بنابراین بیایید سعی کنیم مثال را با کامیون ها گسترش دهیم. بیایید یک کلاس جدید ایجاد کنیم - BridgeOfficer. یک افسر پلیس در حال انجام وظیفه بر روی پل است و تمام کامیون های عبوری را بررسی می کند تا مطمئن شود که بار آنها از حد مجاز وزن تجاوز نمی کند.
public class BridgeOfficer {

    int maxWeight;

    public BridgeOfficer(int normalWeight) {
        this.maxWeight = normalWeight;
    }

    public boolean checkTruck(Truck truck) {
        if (truck.weight > maxWeight) {
            return false;
        } else {
            return true;
        }
    }
}
این روش checkTruckیک پارامتر را به عنوان ورودی می گیرد - یک شی کامیون Truck، و تعیین می کند که آیا افسر به کامیون اجازه می دهد روی پل برود یا نه. منطق داخل روش بسیار ساده است: اگر وزن کامیون از حداکثر مجاز بیشتر شود، روش برمی‌گردد false. باید به دنبال جاده دیگری بگردید:( اگر وزن کمتر یا مساوی حداکثر باشد، می توانید رد کنید، و روش برمی گردد true. اگر هنوز عبارات "بازگشت" را کاملا متوجه نشده اید، "روش مقداری را برمی گرداند." ” - بیایید از برنامه نویسی فاصله بگیریم و با استفاده از یک مثال ساده از یک زندگی واقعی به این موضوع نگاه کنیم :) فرض کنید بیمار شدید و چندین روز سر کار نبودید. شما با مرخصی استعلاجی به حسابداری می آیید که باید آن را پرداخت کنید. اگر با روش ها قیاس کنیم، حسابدار روشی دارد paySickLeave()("پرداخت مرخصی استعلاجی"). شما گواهی مرخصی استعلاجی را به این روش به عنوان پارامتر می دهید (بدون آن، روش کار نمی کند و هیچ پولی به شما تعلق نمی گیرد!). در داخل روش کاربرگ، محاسبات لازم انجام می شود (حسابدار از آن برای محاسبه مبلغی که شرکت باید به شما پرداخت کند) استفاده می کند و نتیجه کار به شما بازگردانده می شود - مبلغی. برنامه به همین ترتیب کار می کند. یک متد را فراخوانی می کند، داده ها را در آنجا ارسال می کند و در نهایت نتیجه را دریافت می کند. در اینجا روش main()برنامه ما آمده است BridgeOfficer:
public static void main(String[] args) {
    Truck first = new Truck();
    first.weight = 10000;
    Truck second = new Truck();
    second.weight = 20000;

    BridgeOfficer officer = new BridgeOfficer(15000);
    System.out.println("Truck number 1! May I pass, officer?");
    boolean canFirstTruckGo = officer.checkTruck(first);
    System.out.println(canFirstTruckGo);

    System.out.println();

    System.out.println("Truck number 2! May I?");
    boolean canSecondTruckGo = officer.checkTruck(second);
    System.out.println(canSecondTruckGo);
}
ما در حال ایجاد دو کامیون با بارهای 10000 و 20000 هستیم. در عین حال حداکثر وزن برای پلی که در آن افسر در حال انجام وظیفه است 15000 است. برنامه ای که روش نام دارد، officer.checkTruck(first)روش همه چیز را محاسبه کرد و نتیجه را به برنامه برگرداند - true، و برنامه آن را در متغیر ذخیره کرد boolean canFirstTruckGo. حالا او می تواند هر کاری که می خواهد با آن انجام دهد (درست مثل شما با پولی که از حسابدار دریافت کرده اید). در نهایت کد
boolean canFirstTruckGo = officer.checkTruck(first);
پایین می آید به
boolean canFirstTruckGo = true;
یک نکته بسیار مهم: اپراتور returnنه تنها نتیجه متد را برمی گرداند، بلکه کار خود را نیز خاتمه می دهد ! تمام کدهای نوشته شده پس از بازگشت اجرا نمی شوند!
public boolean checkTruck(Truck truck) {

    if (truck.weight > maxWeight) {
        return false;
        System.out.println("Turn around, overweight!");
    } else {
        return true;
        System.out.println("Alright, move on!");
    }
}
عباراتی که افسر میگه به ​​کنسول خروجی نمیشه چون روش قبلا نتیجه داده و کارش رو کامل کرده! برنامه به نقطه ای که متد فراخوانی شده بود بازگشت. لازم نیست خودتان نگران این موضوع باشید - کامپایلر جاوا آنقدر هوشمند است که اگر بخواهید بعد از آن کد بنویسید، خطا ایجاد می کند return.

Avengers: Options War

شرایطی وجود دارد که برنامه ما به چندین گزینه برای نحوه عملکرد یک متد نیاز دارد. چرا ما هوش مصنوعی خودمان را ایجاد نمی کنیم؟ آمازون الکسا دارد، یاندکس آلیس دارد، پس چرا ما بدتر هستیم؟ :) در فیلم درباره مرد آهنی، تونی استارک هوش مصنوعی برجسته خود را خلق کرد - JARVIS بیایید به شخصیت فوق العاده ادای احترام کنیم و هوش مصنوعی خود را به افتخار او نام گذاری کنیم :) اولین چیزی که باید به جارویس بیاموزیم - به افرادی که وارد اتاق می شوند سلام کنید (عجیب است اگر چنین عقل بزرگی بی ادب باشد).
public class Jarvis {

    public void sayHi(String name) {
        System.out.println("Good evening, " + name + ", How are you doing?");
    }

    public static void main(String[] args) {
        Jarvis jarvis = new Jarvis();
        jarvis.sayHi("Tony Stark");
    }
}
خروجی کنسول:
Добрый вечер, Тони Старк, How ваши дела?
عالی! جارویس می داند که چگونه به کسی که وارد می شود سلام کند. البته اغلب اوقات صاحب او خواهد بود - تونی استارک. اما شاید تنها نیاید! و روش ما sayHi()فقط یک آرگومان را به عنوان ورودی می گیرد. و بر این اساس، او فقط می تواند به یکی از کسانی که می آیند سلام کند و دیگری را نادیده می گیرد. خیلی مودب نیست، موافقی؟ :/ در این حالت برای حل مشکل میتوانیم به سادگی 2 متد را در کلاس با همان نام اما با پارامترهای مختلف بنویسیم:
public class Jarvis {

    public void sayHi(String firstGuest) {
        System.out.println("Good evening, " + firstGuest + ", How are you doing?");
    }

    public void sayHi(String firstGuest, String secondGuest) {
        System.out.println("Good evening, " + firstGuest + ", " + secondGuest + ", How are you doing?");
    }
}
به این روش اضافه بار می گویند . بارگذاری بیش از حد به برنامه ما اجازه می دهد تا انعطاف پذیرتر باشد و گزینه های کاری مختلف را در خود جای دهد. بیایید بررسی کنیم که چگونه کار می کند:
public class Jarvis {

    public void sayHi(String firstGuest) {
        System.out.println("Good evening, " + firstGuest + ", How are you doing?");
    }

    public void sayHi(String firstGuest, String secondGuest) {
        System.out.println("Good evening, " + firstGuest + ", " + secondGuest + ", How are you doing?");
    }

    public static void main(String[] args) {
        Jarvis jarvis = new Jarvis();
        jarvis.sayHi("Tony Stark");
        jarvis.sayHi("Tony Stark", "Captain America");
    }
}
خروجی کنسول:
Добрый вечер, Тони Старк, How ваши дела?
Добрый вечер, Тони Старк, Капитан Америка, How ваши дела?
عالی، هر دو گزینه کار کردند :) با این حال، ما مشکل را حل نکردیم! اگر سه مهمان باشد چه؟ البته sayHi()برای پذیرش نام سه مهمان می توانیم دوباره روش را اضافه بار کنیم. اما می تواند 4 یا 5 مورد از آنها وجود داشته باشد و به همین ترتیب ad infinitum. آیا راه دیگری برای آموزش جارویس وجود دارد که با هر تعداد نام کار کند، بدون میلیون ها بار اضافه بار sayHi()؟ :/ البته دارم! در غیر این صورت آیا جاوا محبوب ترین زبان برنامه نویسی در جهان خواهد بود؟ ;)
public void sayHi(String...names) {

    for (String name: names) {
        System.out.println("Good evening, " + name + ", How are you doing?");
    }
}
رکورد ( String...names) به عنوان یک پارامتر به ما امکان می دهد نشان دهیم که تعداد معینی رشته به متد ارسال شده است. ما از قبل مشخص نمی کنیم که چه تعداد باید باشد، بنابراین عملیات روش ما اکنون بسیار انعطاف پذیرتر می شود:
public class Jarvis {

    public void sayHi(String...names) {
        for (String name: names) {
            System.out.println("Good evening, " + name + ", How are you doing?");
        }
    }

    public static void main(String[] args) {
        Jarvis jarvis = new Jarvis();
        jarvis.sayHi("Tony Stark", "Captain America", "Black Widow", "Hulk");
    }
}
خروجی کنسول:
Добрый вечер, Тони Старк, How ваши дела?
Добрый вечер, Капитан Америка, How ваши дела?
Добрый вечер, Черная Вдова, How ваши дела?
Добрый вечер, Халк, How ваши дела?
برخی از کدهای اینجا برای شما ناآشنا هستند، اما به این موضوع اهمیت ندهید. ماهیت آن ساده است - این روش به نوبه خود از همه نام ها عبور می کند و به هر یک از مهمانان سلام می کند! علاوه بر این، برای هر تعداد از خطوط انتقال یافته کار خواهد کرد! دو، ده، حتی هزار - این روش با هر تعداد مهمان به طور قابل اعتماد کار خواهد کرد. خیلی راحت تر از انجام اضافه بار برای همه گزینه های ممکن، موافق نیستید؟ :) نکته مهم دیگر: ترتیب استدلال ها مهم است! فرض کنید روش ما یک رشته و یک عدد را به عنوان ورودی می گیرد:
public class Man {

    public static void sayYourAge(String greeting, int age) {
        System.out.println(greeting + " " + age);
    }

    public static void main(String[] args) {
        sayYourAge("My age - ", 33);
        sayYourAge(33, "My age - "); //error!
    }
}
اگر یک متد sayYourAgeکلاس Manیک رشته و یک عدد را به عنوان ورودی بگیرد، این ترتیبی است که باید در برنامه ارسال شوند! اگر آنها را به ترتیب دیگری پاس کنیم، کامپایلر خطا می دهد و فرد نمی تواند سن خود را بگوید. ضمناً سازنده هایی که در سخنرانی گذشته به آنها پرداختیم نیز روش هستند! آنها همچنین می توانند بیش از حد بارگذاری شوند (چند سازنده با مجموعه های مختلف آرگومان ایجاد کنید) و برای آنها ترتیب ارسال آرگومان ها نیز اساساً مهم است. روش های واقعی! :)

و دوباره در مورد پارامترها

بله، بله، ما هنوز با آنها تمام نشده ایم :) موضوعی که اکنون در نظر خواهیم گرفت بسیار مهم است. به احتمال 90٪ در تمام مصاحبه های آینده شما در این مورد سوال خواهند کرد! ما در مورد انتقال پارامترها به متدها صحبت خواهیم کرد. بیایید به یک مثال ساده نگاه کنیم:
public class TimeMachine {

    public void goToFuture(int currentYear) {
        currentYear = currentYear+10;
    }

    public void goToPast(int currentYear) {
        currentYear = currentYear-10;
    }

    public static void main(String[] args) {
        TimeMachine timeMachine = new TimeMachine();
        int currentYear = 2020;

        System.out.println("What is the year now?");
        System.out.println(currentYear);

        timeMachine.goToPast(currentYear);
        System.out.println("And now?");
        System.out.println(currentYear);
    }
}
ماشین زمان دو روش دارد. هر دو عددی را به عنوان ورودی می گیرند که نشان دهنده سال جاری است و مقدار آن را افزایش یا کاهش می دهند (بسته به اینکه بخواهیم به گذشته برگردیم یا به آینده). اما همانطور که از خروجی کنسول مشخص است، روش کار نکرد! خروجی کنسول:
Какой сейчас год?
2020
А сейчас?
2020
ما متغیری را currentYearبه متد ارسال کردیم goToPast()، اما مقدار آن تغییر نکرد. همانطور که در سال 2020 بود، همینطور باقی می ماند. اما چرا؟ :/ چون primitive ها در جاوا با مقدار به متدها منتقل می شوند. چه مفهومی داره؟ وقتی یک متد را فراخوانی می کنیم goToPast()و متغیر خود را در آنجا ارسال می کنیم int currentYear = 2020، این خود متغیر نیست که وارد متد می شود currentYear، بلکه یک کپی از آن است . البته مقدار این کپی نیز برابر با 2020 است، اما تمام تغییراتی که در کپی ایجاد می شود به هیچ وجه بر متغیر اصلی ما تأثیر نمی گذاردcurrentYear ! بیایید کد خود را مفصل‌تر کنیم و ببینیم با currentYear:
public class TimeMachine {

    public void goToFuture(int currentYear) {
        currentYear = currentYear+10;
    }

    public void goToPast(int currentYear) {
        System.out.println("The goToPast method has started!");
        System.out.println("The currentYear value inside the goToPast method (at the beginning) = " + currentYear);
        currentYear = currentYear-10;
        System.out.println("The currentYear value inside the goToPast method (at the end) = " + currentYear);
    }

    public static void main(String[] args) {
        TimeMachine timeMachine = new TimeMachine();
        int currentYear = 2020;

        System.out.println("What is the year at the very beginning of the program?");
        System.out.println(currentYear);

        timeMachine.goToPast(currentYear);
        System.out.println("What year is it now?");
        System.out.println(currentYear);
    }
}
خروجی کنسول:
Какой год в самом начале работы программы?
2020
Метод goToPast начал работу!
Значение currentYear внутри метода goToPast (в начале) = 2020
Значение currentYear внутри метода goToPast (в конце) = 2010
А сейчас Howой год?
2020
این به وضوح نشان می دهد که متغیری که به متد ارسال شده است goToPast()فقط یک کپی است currentYear. و تغییر کپی هیچ تأثیری در معنای "اصل" نداشت. « گذر از مرجع » دقیقاً معنای مخالف دارد. بیایید روی گربه ها تمرین کنیم! منظورم این است که بیایید ببینیم که گذر از پیوند به عنوان مثال از گربه ها چگونه به نظر می رسد :)
public class Cat {

    int age;

    public Cat(int age) {
        this.age = age;
    }
}
اکنون، با کمک ماشین زمان خود، بارسیک، اولین مسافر زمان گربه جهان را به گذشته و آینده خواهیم فرستاد! بیایید کلاس را طوری تغییر دهیم TimeMachineکه ماشین بتواند با اشیا کار کند Cat.
public class TimeMachine {

    public void goToFuture(Cat cat) {
        cat.age += 10;
    }

    public void goToPast(Cat cat) {
        cat.age -= 10;
    }
}
اکنون روش‌ها نه فقط عدد ارسال شده، بلکه فیلد ageیک شی خاص را تغییر می‌دهند Cat. در مورد بدوی، همانطور که به یاد دارید، ما موفق نشدیم: عدد اصلی تغییر نکرد. بیایید ببینیم اینجا چه اتفاقی می افتد!
public static void main(String[] args) {

    TimeMachine timeMachine = new TimeMachine();
    Cat barsik = new Cat(5);

    System.out.println("How old is Barsik at the very beginning of the program?");
    System.out.println(barsik.age);

    timeMachine.goToFuture(barsik);
    System.out.println("And now?");
    System.out.println(barsik.age);

    System.out.println("Firs-sticks! Barsik has aged 10 years! Drive back quickly!");
    timeMachine.goToPast(barsik);
    System.out.println("Did it work? Have we returned the cat to its original age?");
    System.out.println(barsik.age);
}
خروجی کنسول:
Сколько лет Барсику в самом начале работы программы?
5
А теперь?
15
Елки-палки! Барсик постарел на 10 лет! Живо гони назад!
Получилось? Мы вернули коту его изначальный возраст?
5
وای! حالا این روش متفاوت عمل کرد: گربه ما ناگهان پیر شد و دوباره جوان تر به نظر رسید! :) بیایید سعی کنیم دلیل آن را بفهمیم. برخلاف مثال اولیه، در مورد اشیا، ارجاع به شی به متد داده می شود. ارجاع به شی اصلی ما goToFuture(barsik)به متدها منتقل شد . بنابراین، هنگامی که متدهای داخلی را تغییر می دهیم ، به همان ناحیه حافظه ای که شی ما در آن ذخیره می شود دسترسی پیدا می کنیم. این یک پیوند به همان Barsik است که در همان ابتدا ایجاد کردیم. به این می گویند «گذر از مرجع»! با این حال، با این پیوندها همه چیز چندان ساده نیست :) بیایید سعی کنیم مثال خود را تغییر دهیم: goToPast(barsik)barsikbarsik.age
public class TimeMachine {

    public void goToFuture(Cat cat) {
        cat = new Cat(cat.age);
        cat.age += 10;
    }

    public void goToPast(Cat cat) {
        cat = new Cat(cat.age);
        cat.age -= 10;
    }

    public static void main(String[] args) {
        TimeMachine timeMachine = new TimeMachine();
        Cat barsik = new Cat(5);

        System.out.println("How old is Barsik at the very beginning of the program?");
        System.out.println(barsik.age);

        timeMachine.goToFuture(barsik);
        System.out.println("Barsik went to the future! Has his age changed?");
        System.out.println(barsik.age);

        System.out.println("And if you try in the past?");
        timeMachine.goToPast(barsik);
        System.out.println(barsik.age);
    }
}
خروجی کنسول:
Сколько лет Барсику в самом начале работы программы?
5
Барсик отправился в будущее! Его возраст изменился?
5
А если попробовать в прошлое?
5
بازم کار نمیکنه! O_O بیایید بفهمیم چه اتفاقی افتاده :) همه چیز در مورد روش ها goToPast/ goToFutureو مکانیزم نحوه کار پیوندها است. حالا توجه!این نکته مهم ترین نکته در درک نحوه کار لینک ها و روش ها است. در واقع، وقتی یک متد را فرا می‌خوانیم، goToFuture(Cat cat)خود مرجع شی نیست که به آن ارسال می‌شود cat، بلکه یک کپی از این مرجع است. یعنی وقتی یک شی را به یک متد ارسال می کنیم، دو مرجع برای این شی وجود دارد . این برای درک آنچه اتفاق می افتد بسیار مهم است. از این گذشته، به همین دلیل است که آخرین نمونه ما سن گربه را تغییر نداد. در مثال قبلی با تغییر سن، ما به سادگی مرجع پاس شده را در داخل متد گرفتیم goToFuture()، با استفاده از آن شی را در حافظه پیدا کردیم و سن آن را تغییر دادیم ( cat.age += 10). حالا در داخل متد goToFuture()یک شی جدید ایجاد می کنیم
(cat = new Cat(cat.age)),
و به همان لینک کپی که به متد ارسال شده است این شی اختصاص داده می شود. در نتیجه:
  • پیوند اول ( Cat barsik = new Cat(5)) به گربه اصلی (با سن 5 سال) اشاره می کند.
  • بعد از اینکه متغیر را catبه متد ارسال کردیم goToPast(Cat cat)و آن را به یک شی جدید اختصاص دادیم، مرجع کپی شد.
پس از این، وضعیت نهایی را داریم: دو پیوند به دو شی متفاوت اشاره می کنند. اما ما فقط سن یکی از آنها را تغییر دادیم - سنی که در روش ایجاد کردیم.
cat.age += 10;
و طبیعتاً وقتی در متد آن را main()به کنسول خروجی می دهیم barsik.age، می بینیم که سن آن تغییر نکرده است. از این گذشته barsik، این یک متغیر مرجع است که هنوز به شی قدیمی و اصلی با سن 5 سالگی اشاره می کند که هیچ اتفاقی برای آن نیفتاده است. تمام دستکاری های ما با افزایش سن روی یک شی جدید انجام شد. بنابراین، معلوم می شود که اشیاء با مرجع به روش ها منتقل می شوند. کپی از اشیا هرگز به طور خودکار ایجاد نمی شود. اگر یک شی گربه را به روشی منتقل کنید و سن آن را تغییر دهید، با موفقیت تغییر خواهد کرد. اما مقادیر متغیرهای مرجع هنگام تخصیص و یا فراخوانی متدها کپی می شوند! بیایید در اینجا پاراگراف را در مورد عبور دادن اعداد ابتدایی تکرار کنیم: "وقتی یک متد را فراخوانی می کنیم changeInt()و متغیر خود را در آنجا ارسال می کنیم int x = 15، این خود متغیر نیست که وارد متد می شود x، بلکه کپی آن است . بالاخره همه تغییراتی که در کپی رخ می دهد، انجام نمی شود. متغیر اصلی ما را به هر طریقی تحت تأثیر قرار می دهد x. با کپی کردن لینک ها، همه چیز دقیقاً یکسان است! شما شی cat را به روش منتقل می کنید. اگر کاری را با خود گربه انجام دهید (یعنی با شی در حافظه)، همه تغییرات با موفقیت انجام می شود - ما فقط یک شی داشتیم و هنوز هم آن را داریم. اما اگر در داخل یک متد یک شی جدید ایجاد کنید و آن را در یک متغیر مرجع که پارامتر متد است ذخیره کنید، از این به بعد دو شی و دو متغیر مرجع داریم. همین! به این راحتی هم نبود، حتی ممکن است مجبور شوید چندین بار سخنرانی کنید. اما نکته اصلی این است که شما این موضوع فوق العاده مهم را یاد گرفته اید. شما اغلب با آرگومان هایی (حتی در میان توسعه دهندگان با تجربه) در مورد نحوه ارسال آرگومان ها در جاوا مواجه خواهید شد. اکنون دقیقاً می دانید که چگونه کار می کند. ادامه بده! :)
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION