JavaRush /Блоги Java /Random-TG /Гузаронидани параметрҳо дар Java
vincent_vega
Сатҳи
Gainesville

Гузаронидани параметрҳо дар Java

Дар гурӯҳ нашр шудааст
Тағирёбанда дар Java контейнерест, ки дар он арзиш дорад. Пас "гузаштан" тағирёбанда чӣ маъно дорад? Ва фарқияти байни намудҳои маълумоти ибтидоӣ ва истинод чӣ гуна аст.
Гузаронидани параметрҳо дар Java - 1
Мо ба он баъдтар мерасем. Биёед аввал бо як супориши оддӣ оғоз кунем. Ин code чӣ кор мекунад:
int х = 3;
int у = х;
Дар сатри 1 таѓйирёбандаи x навъи int сохта мешавад ва ба он ќимати 3 дода мешавад. Дар сатри 2 таѓйирёбандаи y навъи int сохта мешавад ва арзиши таѓйирёбандаи x таъин карда мешавад . Дар оянда, тағирёбандаи x ба ҳеҷ ваҷҳ ба y таъсир намерасонад . Java арзиши x (3) -ро нусхабардорӣ мекунад ва онҳоро ба y ҷойгир мекунад . Ин параметр аз рӯи арзиш мегузарад. Шумо як тағирёбандаро ба дигараш наменависед. Қимат нусхабардорӣ ва ба тағирёбандаи нав таъин карда мешавад. Ифодаи y = x; Маънои НЕСТ "навиштани x ба y ". Ин маънои онро дорад, ки "қиматро дар дохor x нусхабардорӣ кунед ва он нусхаро ба y нависед ." Агар дертар ман y-ро иваз кунам :
у = 34;
Оё ин ба x таъсир мерасонад ? Албатта на. x то ҳол арзиши 3-ро дорад. Агар ман x -ро дертар иваз кунам :
х = 90;
Ин ба шумо чӣ гуна таъсир мерасонад ? Ҳеч роҳ. Онҳо пас аз иҷрои супориш ба ҳеҷ ваҷҳ алоқаманд нестанд (Нусхабардории арзиш). Дар бораи намудҳои истинод чӣ гуфтан мумкин аст? Онҳо чӣ гуна кор мекунанд? На он қадар мушкил, дар асл қоида ҳамон аст. Истинодҳо ҳамон корро мекунанд - шумо нусхаи истинодро мегиред. Пас, агар гӯям:
Cat A = new Cat ();
Cat B = A;
Истиноди А ба истиноди В нусхабардорӣ карда мешавад. Ин ба an object дахл надорад - шумо то ҳол танҳо як an object доред. Аммо ҳоло шумо ду истинодҳои гуногун доред, ки як an objectи Cat- ро идора мекунанд . Акнун биёед ба интиқоли параметрҳо ба усулҳо назар кунем. Java параметрҳоро аз рӯи арзиш мегузарад. Ҳамеша. Ин маънои онро дорад, ки "арзишро нусхабардорӣ кунед ва нусхаро интиқол диҳед." Барои навъҳои ибтидоӣ ин осон аст:
int х = 5;
doStuff (х); / / Передать копию х (meaning 5) в метод doStuff
Усули doStuff чунин менамояд:
void doStuff (int у) {

   / / Действия с 'y'
}
Нусхаи арзиши x , яъне 5 ба усули doStuff() интиқол дода мешавад . Усули doStuff() тағирёбандаи худро дорад, ки y ном дорад . Тағйирёбандаи y як тағирёбандаи нав ва гуногун аст. Бо нусхаи он чизе, ки дар x ҳангоми гузаштан ба усул буд. Минбаъд y ва x ба ҳамдигар ҳеҷ таъсире надоранд. Вақте ки шумо y -ро иваз мекунед, шумо ба x таъсир намерасонед .
void doStuff (int у) {

   у = 27; / / Это не влияет на 'х'
}
Ва баръакс - агар шумо x -ро тағир диҳед, шумо y -ро тағир намедиҳед . Ягона коре, ки x дар ин ҳолат анҷом дод , арзиши онро нусхабардорӣ карда, ба усули doStuff() интиқол дод . Чӣ тавр "аз рӯи арзиш гузаштан" бо истинодҳо кор мекунад? Бисёр одамон мегӯянд, ки "Java намудҳои ибтидоиро аз рӯи арзиш ва an objectҳоро аз рӯи истинод мегузаронад." Он чизе ки онҳо мегӯянд нест. Java ҳама чизро аз рӯи арзиш мегузарад. Бо ибтидоӣ, шумо нусхаи мундариҷаро мегиред. Бо истинодҳо шумо инчунин нусхаи мундариҷаро мегиред. Аммо мундариҷаи пайванд чист? Назорати дурдаст. Воситаҳо барои идора/дастрасӣ ба иншоот. Вақте ки шумо истинодро ба an object ба усул мегузоред, шумо нусхаи истинодро мегузаронед. Клони идоракунии дурдаст. Объект то ҳол дар чӯбе, ки дар он ҷо сохта шуда буд, нишаста, мунтазири он аст, ки касе аз пулти фосилавӣ истифода кунад. Объект парвое надорад, ки барои идора кардани он чй кадар дурдаст «программа» карда шудааст. Ягона одамоне, ки дар ин бора ғамхорӣ мекунанд, ҷамъкунандаи ахлот ва шумо, барномасозед. Пас, вақте ки шумо мегӯед:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   / / Использование B
}
Танҳо як an objectи Cat вуҷуд дорад . Аммо ҳоло ду назорати дурдаст (пайвандҳо) метавонанд ба як an objectи Cat дастрасӣ пайдо кунанд . Ҳамин тавр, ҳоло ҳар он чизе ки B ба an objectи Cat мекунад, ба Cat , ки аз ҷониби A нишон дода шудааст, таъсир мерасонад , аммо он ба мундариҷаи A таъсир намерасонад ! Шумо метавонед Cat-ро бо истифода аз истиноди нави B иваз кунед (бевосита аз A нусхабардорӣ шудааст ), аммо шумо A тағир дода наметавонед. Ин чӣ маъно дорад? Шумо метавонед an objectеро, ки A ба он ишора мекунад, тағир диҳед , аммо шумо истинодҳои A-ро тағир дода наметавонед - онро ба an objectи дигар равона кунед ё null . Пас, агар шумо истинод ба B тағир диҳед (на an objectи воқеии Cat , ки B истинод мекунад , балки арзиши худи истинод), шумо арзиши A- ро тағир намедиҳед . Ва баръакс. Ҳамин тавр:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   B = new Cat (); / / Не повлияет на ссылку A
}
Ин танҳо маънои онро дорад, ки B ба an objectи дигар ишора мекунад. А то хол хушбахт аст. Пас аз ман такрор кунед: Java ҳама чизро аз рӯи арзиш мегузарад. (Хуб, бори дигар... бо эҳсос.) Java ҳама чизро аз рӯи арзиш мегузарад. Барои намудҳои ибтидоӣ шумо нусхаи арзиши ҷориро, барои истинодҳои an objectӣ нусхаи истинодро (идораи дурдаст) мегузоред. Шумо ҳеҷ гоҳ аз an object намегузаред. Ҳама an objectҳо дар теппа нигоҳ дошта мешаванд. Ҳамеша. Акнун як пиёла қаҳва пухта ва каме code нависед! Мақолаи аслӣ .
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION