JavaRush /Java блогы /Random-KK /Java тілінде параметрлерді беру
vincent_vega
Деңгей
Gainesville

Java тілінде параметрлерді беру

Топта жарияланған
Java тіліндегі айнымалы мән – онда мәні бар контейнер. Сонымен, айнымалыны «өткізу» нені білдіреді? Қарапайым және анықтамалық деректер түрлерінің айырмашылығы неде.
Java-да параметрлерді беру - 1
Бұған кейінірек жетеміз. Алдымен қарапайым тапсырмадан бастайық. Бұл code не істейді:
int х = 3;
int у = х;
1-жолда int түріндегі x айнымалысы жасалады және оған 3 мәні тағайындалады. 2-жолда int түріндегі y айнымалысы жасалады және x айнымалысының мәні тағайындалады . Болашақта x айнымалысы y мәніне ешқандай әсер етпейді . Java x (3) мәнін көшіреді және көшірмелерді y ішіне орналастырады . Бұл мән бойынша параметрді беру. Сіз бір айнымалыны екіншісіне жазбайсыз. Мән көшіріледі және жаңа айнымалыға тағайындалады. y = x өрнегі ; « x- ты у -ға жазу» дегенді білдірмейді . Бұл « x ішіндегі мәнді көшіріп , сол көшірмені y -ге жаз » дегенді білдіреді. Егер кейінірек y өзгертсем :
у = 34;
Бұл x- ке әсер ете ме ? Әрине жоқ. x әлі де 3 мәніне ие. Егер x мәнін кейінірек өзгертсем :
х = 90;
Бұл сізге қалай әсер етеді ? Мүмкін емес. Тапсырма орындалғаннан кейін олар ешбір жолмен байланысты емес (мәнді КӨШІРУ). Анықтама түрлері туралы не деуге болады? Олар қалай жұмыс істейді? Бұл қиын емес, іс жүзінде ереже бірдей. Сілтемелер бірдей нәрсені жасайды - сіз сілтеменің көшірмесін аласыз. Сондықтан мен айтсам:
Cat A = new Cat ();
Cat B = A;
А сілтемесі В сілтемесіне көшіріледі. Бұл нысанға қолданылмайды - сізде әлі бір ғана нысан бар. Бірақ қазір сізде бір Cat нысанын басқаратын екі түрлі сілтеме бар . Енді әдістерге параметрлерді беруді қарастырайық. Java параметрлерді мән бойынша өткізеді. Әрқашан. Бұл «мәнді көшіру және көшірмені беру» дегенді білдіреді. Қарапайым түрлер үшін бұл оңай:
int х = 5;
doStuff (х); / / Передать копию х (meaning 5) в метод doStuff
doStuff әдісі келесідей көрінеді:
void doStuff (int у) {

   / / Действия с 'y'
}
x мәнінің көшірмесі , яғни 5, doStuff() әдісіне жіберіледі . doStuff() әдісінің y деп аталатын өз айнымалысы бар . y айнымалысы жаңа, басқа айнымалы. Оны әдіске беру кезінде x ішіндегі нәрсенің көшірмесімен . Бұдан былай у мен х бір-біріне әсер етпейді. y өзгерткенде , сіз x-ке әсер етпейсіз .
void doStuff (int у) {

   у = 27; / / Это не влияет на 'х'
}
Және керісінше - егер сіз x өзгертсеңіз, у өзгертпейсіз . Бұл жағдайда x жасаған жалғыз нәрсе оның мәнін көшіру және оны doStuff() әдісіне беру болды . «Мән бойынша өту» сілтемелермен қалай жұмыс істейді? Тым көп адамдар: «Java қарабайыр типтерді мән бойынша және нысандарды сілтеме бойынша өткізеді» дейді. Бұл олардың айтқаны емес. Java барлығын мән бойынша өткізеді. Примитивтермен сіз мазмұнның көшірмесін аласыз. Сілтемелер арқылы сіз мазмұнның көшірмесін аласыз. Бірақ сілтеменің мазмұны қандай? Қашықтықтан басқару пульті. Объектіні басқаруға/қол жеткізуге арналған құралдар. Нысанға сілтемені әдіске бергенде, сілтеменің көшірмесін бересіз. Қашықтан басқару құралының клоны. Нысан әлі күнге дейін өзі жасалған үйіндіде отырады, біреудің пультті пайдалануын күтуде. Нысан оны басқаруға қанша пульт «бағдарламаланғаны» маңызды емес. Бұған тек қоқыс жинаушы және сіз, бағдарламашы ғана қамқорлық жасайды. Сондықтан сіз айтқан кезде:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   / / Использование B
}
Бір ғана Cat нысаны бар . Бірақ қазір екі қашықтан басқару құралы (сілтемелер) бір Cat нысанына қол жеткізе алады . Енді B Cat нысанына не істесе де, A көрсеткен мысыққа әсер етеді , бірақ ол A мазмұнына әсер етпейді ! Жаңа B сілтемесі арқылы Cat өзгерте аласыз (тікелей A -дан көшірілген), бірақ A өзгерте алмайсыз. Бұл нені білдіреді? Сіз A сілтеме жасайтын нысанды өзгерте аласыз , бірақ A сілтемесін өзгерте алмайсыз - оны басқа нысанға қайта бағыттаңыз немесе null . Сондықтан B сілтемесін өзгертсеңіз ( B сілтеме жасайтын нақты Cat нысаны емес, сілтеменің өзі) A мәнін өзгертпейсіз . Және керісінше. Сондықтан:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   B = new Cat (); / / Не повлияет на ссылку A
}
Бұл жай ғана B басқа нысанды көрсетеді дегенді білдіреді . А әлі бақытты. Менен кейін қайталаңыз: Java барлығын мән бойынша өткізеді. (Жарайды, тағы бір рет... сезіммен.) Java барлығын мән бойынша өткізеді. Қарапайым түрлер үшін ағымдағы мәннің көшірмесін, нысан сілтемелері үшін сілтеменің көшірмесін (қашықтан басқару пульті) жібересіз. Сіз an objectіні ешқашан өткізбейсіз. Барлық нысандар үймеде сақталады. Әрқашан. Енді бір кесе кофе қайнатып, code жазыңыз! Түпнұсқа мақала.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION