JavaRush /Блоги Java /Random-TG /Усулҳо, параметрҳои онҳо, таъсири мутақобила ва изофабори...

Усулҳо, параметрҳои онҳо, таъсири мутақобила ва изофабори

Дар гурӯҳ нашр шудааст
Боз салом! Дар лекциям гузашта мо бо синфхо ва конструк-торхо шинос шуда, тарзи сохтани синфхои худро омухтем. Усулҳо, параметрҳои онҳо, таъсири мутақобила ва изофабори - 1Имрӯз мо ба чунин қисми ҷудонашавандаи дарсҳо, ба монанди методҳо, бодиққат дида мебароем. Метод маҷмӯи фармонҳоест, ки ба шумо имкон медиҳад, ки баъзе амалҳоро дар барнома иҷро кунед. Ба ибораи дигар, усул функсия аст; чизе ки синфи шумо карда метавонад. Дар дигар забонҳои барномасозӣ, усулҳоро аксар вақт "функсияҳо" меноманд, аммо дар Java калимаи "метод" маъмултар шудааст :) Дар лексияи охирин, агар дар ёд дошта бошед, мо барои синфи 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()усулхои синфи мо мебошанд. Натиҷаи кори онҳо баромад ба консол аст:
Мяу!
Прыг-скок!
Усулҳои мо хеле соддаанд: онҳо танҳо матнро дар консол чоп мекунанд. Аммо дар Java, методҳо вазифаи асосӣ доранд - онҳо бояд амалҳоро дар маълумоти an object иҷро кунанд . Қимати маълумоти an objectро тағир диҳед, онро табдил диҳед, онро ба консол бароред ё бо он кори дигаре анҷом диҳед. Усулҳои ҳозираи мо бо маълумоти an object ҳеҷ коре намекунанд Cat. Биёед ба мисоли равшантар назар андозем:
public class Truck {

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

    public int getVolume() {
        int volume = length * width * height;
        return volume;
    }
}
Масалан, мо як синф дорем, ки мошини боркаш - Truck. Прицепи боркаш дарозӣ, паҳнӣ ва баландӣ ва вазн дорад (ин баъдтар лозим мешавад). Дар усул, getVolume()мо ҳисобкуниро анҷом медиҳем - мо маълумоти an objectи худро ба рақаме табдил медиҳем, ки ҳаҷмро нишон медиҳад (мо дарозӣ, паҳнӣ ва баландиро зарб мекунем). Ин рақамест, ки натиҷаи усул хоҳад буд. Лутфан қайд кунед - дар тавсифи усул он навишта шудааст public int getVolume. Ин маънои онро дорад, ки натиҷаи ин усул бояд рақам дар шакл бошад int. Мо натиҷаи методро ҳисоб кардем ва ҳоло мо бояд онро ба барномаи худ, ки метод номида буд, баргардонем . Барои баргардонидани натиҷаи усул дар Java калимаи калидӣ истифода мешавад 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як параметрро ҳамчун вуруд мегирад - an objectи боркаш Truckва муайян мекунад, ки афсар мошини боркашро ба купрук иҷозат медиҳад ё не. Мантиқи дохor усул хеле содда аст: агар вазни мошини боркаш аз ҳадди иҷозатдодашуда зиёд бошад, усул бармегардад false. Шумо бояд роҳи дигарро ҷустуҷӯ кунед :( Агар вазн аз ҳадди аксар камтар ё баробар бошад, шумо метавонед гузаред ва усул бармегардад true. Агар шумо то ҳол ибораҳои "бозгашт", "метод арзишро пурра нафаҳмед. ” - биёед аз барномасозӣ танаффус гирем ва бо истифода аз як мисоли оддӣ аз ҳаёти воқеии ҷаҳон инро бубинем :) Фарз мекунем, ки шумо бемор шудед ва чанд рӯз дар ҷои кор набудед. Шумо бо рухсатии бемориатон ба бухгалтерия меоед, ки онро бояд пардохт кунед. Агар бо усулҳо қиёс кунем, пас муҳосиб усуле дорад paySickLeave()(«рухсатии беморӣ пардохт»). Шумо шаҳодатномаи рухсатии бемориро ба ин усул ҳамчун параметр мегузоред (бе он усул кор намекунад ва ба шумо ҳеҷ чиз пардохт карда намешавад!). Дар дохor усули варақаи корӣ ҳисобҳои зарурӣ анҷом дода мешаванд (муҳосиб барои ҳисоб кардани он, ки ширкат бояд ба шумо чӣ қадар пул диҳад) ва натиҷаи кор ба шумо баргардонида мешавад - маблағи пул. Барнома ҳамин тавр кор мекунад. Он методро даъват мекунад, маълумотро ба он ҷо интиқол медиҳад ва дар ниҳоят натиҷаро қабул мекунад. Ин аст усули 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);
}
Мо ду мошини боркаш бо 10.000 ва 20.000 бор месозем.Дар айни замон вазни максималии пуле, ки афсар дар он ҷо навбатдор аст, 15.000 аст.Барномае, ки метод ном дошт, усул officer.checkTruck(first)ҳама чизро ҳисоб кард ва натиҷаро ба барнома баргардонд - true, ва барнома онро дар тағирёбанда захира кард boolean canFirstTruckGo. Акнун бо он хар чи хохад, карда метавонад (мисли шумо бо пуле, ки аз хисобчй гирифтаед). Дар ниҳоят, code
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!");
    }
}
Ибораҳое, ки афсар мегӯяд, ба консол бароварда намешаванд, зеро усул аллакай натиҷа дод ва кори худро анҷом дод! Барнома ба нуқтае баргашт, ки усул даъват карда шуд. Ба шумо лозим нест, ки худатон дар ин бора хавотир шавед - компилятори Java ба қадри кофӣ оқилона аст, ки агар шумо пас аз return.

Avengers: Options War

Ҳолатҳое вуҷуд доранд, ки барномаи мо барои кор кардани усул якчанд вариантҳоро талаб мекунад. Чаро мо зеҳни сунъии худро эҷод намекунем? Амазонка Alexa дорад, Яндекс Алис дорад, пас чаро мо бадтарем? :) Дар филм дар бораи Одами оҳан, Тони Старк зеҳни барҷастаи сунъии худро офаридааст - ҶАРВИС Биёед ба қаҳрамони олиҷаноб эҳтиром гузорем ва AI-и худро ба шарафи ӯ ном гузорем :) Аввалин чизе, ки мо бояд Ҷарвисро омӯзем - ба одамоне, ки ба ҳуҷра ворид мешаванд, салом гӯем (агар чунин ақли бузург беадаб мебуд, аҷиб мебуд).
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 адад бошанд ва ғайра. Оё роҳи дигаре ҳаст, ки ба Ҷарвис кор карданро бо ягон шумораи номҳо бидуни миллионҳо изофабори методҳо таълим диҳад sayHi()? :/ Албатта доранд! Дар акси ҳол, оё Java маъмултарин забони барномасозӣ дар ҷаҳон хоҳад буд? ;)
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 буд, ҳамон тавр боқӣ мемонад. Аммо барои чӣ? :/ Зеро примитивҳо дар Java ба усулҳо аз рӯи арзиш интиқол дода мешаванд. Ин чӣ маъно дорад? Вақте ки мо методро даъват мекунем goToPast()ва тағирёбандаи худро ба он ҷо мегузорем int currentYear = 2020, на худи тағирёбанда ба усул ворид мешавад currentYear, балки нусхаи он аст . Қимати ин нусха, албатта, ба соли 2020 баробар аст, аммо ҳама тағйироте, ки дар нусха ба амал меояд, ба ҳеҷ ваҷҳ ба тағирёбандаи аслии мо таъсир намерасонадcurrentYear ! Биёед codeи худро муфассалтар созем ва бубинем, ки бо 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, то мошин бо an objectҳо кор кунад Cat;
public class TimeMachine {

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

    public void goToPast(Cat cat) {
        cat.age -= 10;
    }
}
Усулҳо акнун на танҳо рақами гузаштаро, балки майдони agean objectи мушаххасро низ иваз мекунанд 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
Вой! Акнун ин усул ба таври дигар кор мекард: гурбаи мо ногаҳон пир шуд ва боз ҷавонтар намуд! :) Биёед кӯшиш кунем, ки чаро. Баръакси мисоли ибтидоӣ, дар мавриди an objectҳо истинод ба an object ба усул интиқол дода мешавад. Истинод ба an objectи аслии мо goToFuture(barsik)ба усулҳо интиқол дода шуд . Аз ин рӯ, вақте ки мо усулҳои дохorро тағир медиҳем , мо ба майдони хотирае, ки an objectи мо нигоҳ дошта мешавад, ворид мешавем. Ин пайванд ба ҳамон Барсик аст, ки мо дар ибтидо офарида будем. Инро "гузаштан бо истинод" меноманд! Аммо, бо ин истинодҳо ҳама чиз он қадар оддӣ нест :) Биёед кӯшиш кунем, ки мисоли худро тағир диҳем: 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)на худи истинод ба an object ба он интиқол дода мешавад cat, балки нусхаи ин истинод аст. Яъне, вақте ки мо an objectро ба усул мегузарем, ду истинод ба ин an object мавҷуд аст . Ин барои фаҳмидани он чӣ рӯй дода истодааст, хеле муҳим аст. Охир, аз хамин сабаб мисоли охирини мо синну соли гурбаро тагьир надод. Дар мисоли қаблӣ бо тағир додани синну сол, мо танҳо истиноди гузаштаро дар дохor метод гирифтем goToFuture(), бо истифода аз он an objectро дар хотира ёфтем ва синну соли онро тағир додем ( cat.age += 10). Ҳоло дар дохor усул goToFuture()мо an objectи нав эҷод мекунем
(cat = new Cat(cat.age)),
ва ҳамон пайванди нусхабардорӣ, ки ба усул гузаронида шуда буд, ин an object таъин карда мешавад. Дар натиҷа:
  • Истиноди аввал ( Cat barsik = new Cat(5)) ба гурбаи аслӣ ишора мекунад (бо синни 5)
  • Пас аз он ки мо тағирёбандаро catба метод интиқол додем goToPast(Cat cat)ва онро ба an objectи нав таъин кардем, истинод нусхабардорӣ карда шуд.
Пас аз ин, мо вазъияти ниҳоӣ дорем: ду пайванд ба ду an objectи гуногун ишора мекунанд. Аммо мо синну соли танҳо як нафари онҳоро тағйир додем - оне, ки мо дар дохor усул офаридаем.
cat.age += 10;
Ва табиист, ки вақте ки мо онро main()ба консол дар метод мебарорем barsik.age, мебинем, ки синну соли он тағир наёфтааст. Дар ниҳоят barsik, ин як тағирёбандаи истинод аст, ки то ҳол ба an objectи кӯҳна ва аслӣ бо синни 5 ишора мекунад, ки ба он ҳеҷ чиз рух надодааст. Ҳама манипуляцияҳои мо бо синну сол дар an objectи нав анҷом дода шуданд. Ҳамин тариқ, маълум мешавад, ки an objectҳо тавассути истинод ба усулҳо интиқол дода мешаванд. Нусхаҳои an objectҳо ҳеҷ гоҳ ба таври худкор эҷод карда намешаванд. Агар шумо an objectи гурбаро ба усул гузаред ва синну соли онро тағир диҳед, он бомуваффақият тағир меёбад. Аммо арзишҳои тағирёбандаҳои истинод ҳангоми таъин ва / ё даъват кардани усулҳо нусхабардорӣ карда мешаванд! Биёед дар ин ҷо параграфро дар бораи интиқоли ибтидоӣ такрор кунем: "Вақте ки мо методро даъват мекунем changeInt()ва тағирёбандаи худро ба он ҷо мегузорем int x = 15, на худи тағирёбанда ба метод x, балки нусхаи он ворид мешавад . Охир, ҳама тағиротҳое, ки бо нусхабардорӣ рух медиҳанд, ба амал намеоянд. ба тағирёбандаи аслии мо ҳар гуна таъсир мерасонад x." Бо нусхабардории истинодҳо, ҳама чиз маҳз ҳамон тавр кор мекунад! Шумо an objectи гурбаро ба метод мегузаред. Агар шумо бо худи гурба коре кунед (яъне бо an object дар хотира), ҳама тағирот бомуваффақият мегузарад - мо танҳо як an object доштем ва ҳоло ҳам онро дорем. Аммо агар дар дохor усул an objectи нав эҷод кунед ва онро дар як тағирёбандаи истинод, ки параметри метод аст, захира кунед, аз ин ба баъд мо ду an object ва ду тағирёбандаи истинод дорем. Ҳамааш ҳамин! Ин чандон осон набуд, шояд шумо ҳатто якчанд маротиба лекция хонед. Аммо чизи асосӣ ин аст, ки шумо ин мавзӯи хеле муҳимро омӯхтаед. Шумо аксар вақт бо баҳсҳо дучор мешавед (ҳатто дар байни таҳиягарони ботаҷриба) дар бораи он ки чӣ гуна далелҳо дар Java интиқол дода мешаванд. Акнун шумо аниқ медонед, ки он чӣ гуна кор мекунад. Давом диҳед! :)
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION