JavaRush /Java блогу /Random-KY /Методдор, алардын параметрлери, өз ара аракеттенүүсү жана...

Методдор, алардын параметрлери, өз ара аракеттенүүсү жана ашыкча жүктөө

Группада жарыяланган
Дагы бир жолу салам! Акыркы лекцияда биз класстар жана конструкторлор менен таанышып, өзүбүздүн классыбызды түзүүнү үйрөндүк. Методдор, алардын параметрлери, өз ара аракеттенүүсү жана ашыкча жүктөө - 1Бүгүн биз методдор сыяктуу сабактардын ажырагыс бөлүгүн кылдат карап чыгабыз. Метод – программада кандайдыр бир операцияларды аткарууга мүмкүндүк берүүчү командалардын жыйындысы. Башкача айтканда, метод – бул функция; сиздин класс жасай турган нерсе. Башка программалоо тилдеринде методдор көбүнчө "функциялар" деп аталат, бирок Java тorнде "метод" деген сөз популярдуу болуп калды :) Акыркы лекцияда, эсиңизде болсо, мышыктарыбыз мияулоо үчүн 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тин маалыматтары боюнча аракеттерди жасашы керек . Объекттин берorштеринин маанисин өзгөртүңүз, аны өзгөртүңүз, консолго чыгарыңыз же аны менен башка бир нерсе жасаңыз. Биздин учурдагы ыкмаларыбыз an objectтин маалыматтары менен эч нерсе кылbyte 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 тorндеги методдун натыйжасын кайтаруу үчүн ачкыч сөз колдонулат return.
return volume;

Методдун параметрлери

Методдор маанилерди киргизүү катары кабыл алат, алар "ыкма параметрлери" деп аталат. getVolume()Класстагы биздин азыркы методубуз Truckэч кандай параметрди кабыл алbyte, ошондуктан жүк ташуучу унаалар менен мисалды кеңейтүүгө аракет кылалы. Келгиле, жаңы класс түзөлү - BridgeOfficer. Мorция кызматкери көпүрөдө нөөмөттө турат жана өтүп бара жаткан жүк ташуучу унаалардын баарын текшерет, алардын жүктөрү уруксат берилген салмактан ашпасын.
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жана офицер жүк ташуучу унааны көпүрөгө киргизеби же жокпу аныктайт. Методдун ичиндеги логика абдан жөнөкөй: жүк ташуучу унаанын салмагы максималдуу жол берилгенден ашып кетсе, ыкма кайтып келет 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);
}
10 000 жана 20 000 жүктөрү бар эки жүк ташуучу унааны түзүп жатабыз. Ошол эле учурда офицер нөөмөттө турган көпүрөнүн максималдуу салмагы 15 000. Метод деп аталган программа , ыкма officer.checkTruck(first)баарын эсептеп чыгып, натыйжаны программага кайтарып берди - true, жана программа аны өзгөрмөдө сактады boolean canFirstTruckGo. Эми аны менен каалаганын кыла алат (бухгалтерден алган акчаңа окшоп). Акыр-аягы, code
boolean canFirstTruckGo = officer.checkTruck(first);
чейин түшөт
boolean canFirstTruckGo = true;
Абдан маанилүү жагдай: оператор returnметоддун натыйжасын гана кайтарбастан, анын ишин токтотот ! Кайтарылгандан кийин жазылган codeдун баары аткарылbyte!
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!");
    }
}
Офицер айткан фразалар консолго чыгарылbyte, анткени ыкма буга чейин эле натыйжа берип, өз ишин аяктаган! Программа методду чакырган жерине кайтып келди. Бул жөнүндө өзүңүз тынчсыздануунун кереги жок - Java компилятору, эгер сиз кийин code жазууга аракет кылсаңыз, ката кетире тургандай акылдуу 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 дүйнөдөгү эң популярдуу программалоо тor болмок беле? ;)
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 ваши дела?
Бул жердеги codeдун айрымдары сизге тааныш эмес, бирок буга каршы болбоңуз. Анын маңызы жөнөкөй - ыкма кезеги менен бардык ысымдар аркылуу өтүп, коноктордун ар бири менен учурашат! Мындан тышкары, ал которулган линиялардын каалаган саны үчүн иштейт! Эки, он, ал тургай, миң - ыкма коноктордун каалаган саны менен ишенимдүү иштейт. Бардык мүмкүн болгон варианттарды ашыкча жүктөөдөн алда канча ыңгайлуу, макул эмессизби? :) Дагы бир маанилүү жагдай: аргументтердин тартиби маанилүү! Келгиле, биздин ыкма киргизүү катары сапты жана санды алат дейли:
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;
    }
}
Методдор эми өткөн санды эле эмес, ageбелгилүү бир an objectтин талаасын да өзгөртөт Cat. Примитивдерде, эсиңизде болгондой, биз ийгorкке жеткен жокпуз: баштапкы сан өзгөргөн жок. Келгиле, бул жерде эмне болгонун карап көрөлү!
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
Wow! Эми ыкма башкача иштеди: биздин мышык күтүлбөгөн жерден карып, анан кайра жаш көрүндү! :) Келгиле, эмне үчүн экенин түшүнүүгө аракет кылалы. Примитивдер менен мисалдан айырмаланып, an objectилерде an objectке шилтеме методго өтөт. Биздин баштапкы an objectибизге шилтеме методдорго goToFuture(barsik)өттү . Ошондуктан, биз ички ыкмаларды өзгөрткөндө , 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ке эки шилтеме болот . Бул эмне болуп жатканын түшүнүү үчүн абдан маанилүү. Анткени, биздин акыркы мисалыбыз мышыктын жашын өзгөртпөгөн. Мурунку мисалда жашты өзгөртүү менен, биз жөн гана методдун ичиндеги өткөн шилтемени алып goToFuture(), аны колдонуп эс тутумдагы an objectти таап, анын жашын өзгөрттүк ( cat.age += 10). Эми методдун ичинде goToFuture()биз жаңы an object түзөбүз
(cat = new Cat(cat.age)),
жана методго өткөн ошол эле көчүрмө шилтемеси бул an objectке ыйгарылат. Жыйынтыгында:
  • Биринчи шилтеме ( Cat barsik = new Cat(5)) баштапкы мышыкты көрсөтөт (5 жашта)
  • Биз өзгөрмөнү catметодго өткөрүп goToPast(Cat cat), аны жаңы an objectке дайындагандан кийин, шилтеме көчүрүлдү.
Ушундан кийин бизде акыркы абал бар: эки шилтеме эки башка an objectти көрсөтүп турат. Бирок биз алардын бирөөсүнүн гана жашын өзгөрттүк – методдун ичинде жараткан курагыбызды.
cat.age += 10;
main()Жана табигый түрдө, биз аны консолго методдо чыгарганда barsik.age, анын жашы өзгөрбөгөнүн көрөбүз. Анткени barsik, бул эч нерсе болбогон 5 жаштагы эски, оригиналдуу an objectти көрсөткөн шилтеме өзгөрмө. Биздин бардык манипуляциялар жашы менен жаңы an objectте жасалды. Ошентип, an objectтер шилтеме аркылуу методдорго берилет экен . Объекттердин көчүрмөлөрү эч качан автоматтык түрдө түзүлбөйт. Эгер сиз мышык an objectисин методго өткөрүп берип, анын жашын өзгөртсөңүз, ал ийгorктүү өзгөрөт. Бирок шилтеме өзгөрмөлөрдүн маанилери методдорду дайындоодо жана/же чакырууда көчүрүлөт! Бул жерде примитивдерди өткөрүү жөнүндө абзацты кайталап көрөлү: “Биз методду чакырып changeInt(), ал жакка өзгөрүлмөбүздү өткөргөнүбүздө int x = 15, методго өзгөрмөнүн өзү эмес x, анын көчүрмөсү кирет.Анткени , көчүрүүгө болгон өзгөрүүлөрдүн баары андай эмес. биздин баштапкы өзгөрмөбүзгө кандайдыр бир жол менен таасир этет x. Шилтемелерди көчүрүү менен баары бирдей иштейт! Сиз мышык an objectисин методго өткөрүп бересиз. Эгер сиз мышыктын өзү менен бир нерсе кылсаңыз (б.а. эс тутумдагы an object менен), бардык өзгөрүүлөр ийгorктүү өтөт - бизде бир гана an object болгон жана ал дагы деле бар. Бирок методдун ичинде сиз жаңы an object түзүп, аны методдун параметри болгон шилтеме өзгөрмөсүндө сактасаңыз, мындан ары бизде эки an object жана эки шилтеме өзгөрмө болот. Баары болду! Бул оңой болгон жок, атүгүл бир нече жолу лекция окууга туура келиши мүмкүн. Бирок эң негизгиси сиз бул супер маанилүү теманы үйрөндүңүз. Аргументтер Java'да кантип өтүп жатканы жөнүндө аргументтерге (тажрыйбалуу иштеп чыгуучулардын арасында да) көп жолугасыз. Эми сиз анын кантип иштээрин билесиз. Уланта бер! :)
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION