JavaRush /Блоги Java /Random-TG /Намудҳои маълумот дар Java

Намудҳои маълумот дар Java

Дар гурӯҳ нашр шудааст
Бе дарки синтаксиси Java, таҳиягари ҷиддӣ шудан ғайриимкон аст, бинобар ин мо имрӯз омӯзиши синтаксисро идома медиҳем. Дар яке аз мақолаҳои қаблӣ мо дар бораи тағирёбандаҳои ибтидоӣ сӯҳбат кардем, аммо азбаски ду намуди тағирёбандаҳо мавҷуданд, имрӯз мо дар бораи навъи дуюм - намудҳои истинод дар Java сӯҳбат мекунем. Пас, ин чист? Чаро дар Java намудҳои маълумотҳои истинод лозиманд? Намудҳои маълумотҳои истинод дар Java - 1Биёед тасаввур кунем, ки мо an objectи телевизионӣ дорем, ки дорои баъзе хусусиятҳо, ба монанди рақами канал, баландии садо ва парчам:
public class TV {
   int numberOfChannel;
   int soundVolume;
   boolean isOn;
}
Чӣ тавр як навъи оддӣ метавонад intин маълумотро нигоҳ дорад? Биёед дар хотир дорем: як тағирёбанда int4 byte аст. Аммо дар дохor он ду тағирёбанда (4 byte + 4 byte) як навъ ва инчунин boolean(+1 byte) ... Ҳамагӣ - 4 то 9, аммо чун қоида, дар an object маълумоти хеле бештар нигоҳ дошта мешавад. Чӣ бояд кард? Шумо an objectро ба тағирёбанда гузошта наметавонед. Дар ин лаҳза дар ҳикояи мо, тағирёбандаҳои истинод пайдо мешаванд. Тағйирёбандаҳои истинод суроғаи макони хотираро, ки дар он an objectи мушаххас ҷойгир аст, нигоҳ медоранд. Яъне, ин «визитка» бо суроғаест, ки бо он мо метавонем an objectи худро дар хотираи муштарак пайдо кунем ва бо он баъзе манипуляцияҳоро анҷом диҳем. Истинод ба ҳама гуна an object дар Java тағирёбандаи истинод аст. Ин бо an objectи телевизионии мо чунин хоҳад буд:
TV telly = new TV();
Мо як тағирёбандаи навъи телевизорро бо ном tellyба истинод ба an objectи сохташудаи навъи ТВ муқаррар кардем. Яъне, JVM хотираро дар тӯда барои an objectи телевизионӣ ҷудо мекунад, он ва суроғаи ҷойгиршавии онро дар хотира эҷод мекунад ва онро дар тағирёбанда мегузорад telly, ки дар стек нигоҳ дошта мешавад. Шумо метавонед дар бораи хотира, аз ҷумла стек ва бисёр дигар маълумоти муфидро дар ин лексия хонед . Тағйирёбандаи навъи ТВ ва an objectи навъи ТВ, шумо пай бурдед? Ин бесабаб нест: an objectҳои як навъи муайян бояд тағирёбандаҳои мувофиқи як навъ дошта бошанд (ба ҳисоб гирифтани мерос ва татбиқи интерфейс, аммо ҳоло мо инро ба назар намегирем). Охир, мо шурбо ба стакан рех-танй нестем-ку? Маълум мешавад, ки an objectи мо телевизор аст ва тағирёбандаи истинод барои он ба панели идоракунӣ монанд аст. Бо истифода аз ин пулти дурдаст мо метавонем бо an objectи худ ва маълумоти он муошират кунем. Масалан, хусусиятҳоро барои телевизиони мо муқаррар кунед:
telly.isOn = true;
telly.numberOfChannel = 53;
telly.soundVolume = 20;
Дар ин ҷо мо оператори нуқтаро .барои дастрасӣ ва ба истифодаи унсурҳои дохorи an objectе, ки тағирёбанда ба он ишора мекунад, истифода бурдем. Масалан, дар сатри аввал мо ба тағирёбанда гуфтем telly: "Тағйирёбандаи дохorи isOnan objectе, ки шумо истинод карда истодаед, ба мо диҳед ва онро ба дурустӣ муқаррар кунед" (телевизионро барои мо фурӯзон кунед).

Аз нав муайян кардани тағирёбандаҳои истинод

Фарз мекунем, ки мо ду тағирёбандаи навъи истинод ва an objectҳое дорем, ки онҳо ба онҳо ишора мекунанд:
TV firstTV = new TV();
TV secondTV = new TV();
Агар мо нависем:
firstTV = secondTV;
ин маънои онро дорад, ки мо тағирёбандаи аввалро ҳамчун арзиш нусхаи суроға (қимати битҳои суроға) ба an objectи дуюм таъин кардем ва ҳоло ҳарду тағирёбанда ба an objectи дуюм ишора мекунанд (ба ибораи дигар, ду идоракунии дурдаст барои як ТВ). Дар айни замон, an objectи аввал бе тағирёбандае монд, ки ба он ишора мекунад. Дар натиҷа, мо an objectе дорем, ки онро дастрас кардан ғайриимкон аст, зеро тағирёбанда ба он чунин як риштаи шартӣ буд, ки бе он ба ахлот табдил меёбад, танҳо дар хотира хобида ва ҷойро ишғол мекунад. Баъдан ин an object аз хотира аз ҷониби коллектори ахлот нест карда мешавад . Намудҳои маълумотҳои истинод дар Java - 2Шумо метавонед риштаи пайвасткуниро бо an object бе пайванди дигар канда кунед:
secondTV = null;
Дар натиҷа, танҳо як пайванд ба an object хоҳад буд - firstTV, ва secondTVдигар ба касе ишора намекунад (ки мо барои таъин кардани истинод ба ягон an object ба монанди ТВ дар оянда монеъ намешавад).

Синфи сатр

Алоҳида, ман мехоҳам синфи String -ро зикр намоям . Ин синфи асосӣест, ки барои нигоҳдорӣ ва кор бо маълумоте, ки ҳамчун сатр нигоҳ дошта мешавад, пешбинӣ шудааст. Мисол:
String text = new String("This TV is very loud");
Дар ин ҷо мо сатрро гузаронидем, ки дар созандаи an object нигоҳ дошта мешавад. Аммо касе ин корро намекунад. Дар ниҳоят, сатрҳоро метавон эҷод кард:
String text = "This TV is very loud";
Хеле қулайтар, дуруст? Аз лиҳози маъруфияти истифода Stringаз навъҳои ибтидоӣ кам нест, аммо ҳамоно синф аст ва тағирёбандае, ки ба он ишора мекунад, навъи ибтидоӣ нест, балки як навъи истинод аст. Мо Stringин қобorяти олиҷаноб барои пайваст кардани сатрҳо дорем:
String text = "This TV" + " is very loud";
Дар натиҷа, мо матнро дубора ба даст меорем: This TV is very loud, зеро ду сатр ба як бутун муттаҳид мешаванд ва тағирёбанда ба ин матни пурра ишора мекунад. Як нозуки муҳим аст, ки Stringин як синфи тағйирнопазир аст. Ин чӣ маъно дорад? Биёед ин мисолро гирем:
String text = "This TV";
text = text + " is very loud";
Чунин ба назар мерасад, ки ҳама чиз оддӣ аст: мо тағирёбандаро эълон мекунем, ба он арзиш медиҳем. Дар сатри оянда мо онро иваз мекунем. Аммо мо аслан тағир намеёбем. Азбаски ин синфи тағирнопазир аст, дар сатри дуюм арзиши ибтидоӣ тағир намеёбад, балки наве сохта мешавад, ки дар навбати худ аз якум иборат аст + " is very loud".

Константаҳои истинод

Дар мақола дар бораи навъҳои ибтидоӣ мо ба мавзӯи доимӣ дахл кардем. Вақте ки мо онро ниҳоӣ эълон мекунем, тағирёбандаи истинод чӣ гуна рафтор мекунад ?
final TV telly = new TV();
Шумо шояд фикр кунед, ки ин an objectро тағирнопазир мегардонад. Аммо не, ин дуруст нест. Намудҳои маълумотҳои истинод дар Java - 3Тағйирёбандаи истинод бо тағирдиҳанда finalба an objectи мушаххас бидуни қобorяти кушодани он ба ягон роҳ пайваст карда мешавад (аз нав муайян кардани он ё баробар кардани он null). Яъне, пас аз муқаррар кардани арзиши чунин тағирёбанда, рамзи зерин:
telly = new TV();
ё
telly = null;
боиси хатогии компиляция мегардад. Яъне finalон танҳо дар пайванд амал мекунад ва ба худи an object таъсире надорад. Агар мо дар аввал он тағирёбанда дошта бошем, мо метавонем ҳолати дохorи онро бидуни мушкилот тағир диҳем:
telly.soundVolume = 30;
Баъзан, тағирёбандаҳо ҳатто дар аргументҳои методӣ ҳамчун ниҳоӣ таъин карда мешаванд!
public void enableTV (final TV telly){
   telly.isOn = true;
}
Ин барои он анҷом дода мешавад, ки дар ҷараёни навиштани усул ин далелҳоро аз байн бурдан натавонанд ва мутаносибан нофаҳмиҳои камтар ба вуҷуд оваранд. Чӣ мешавад, агар мо finalтағирёбандаи истинодро, ки ба an objectи тағирнашаванда ишора мекунад, ишора кунем? Масалан String:
final String PASSWORD = "password";
Дар натиља мо константа, аналоги константањои типи ибтидоиро ба даст меорем, зеро дар ин љо на истинодро аз нав муайян карда метавонем ва на њолати дохorи an objectро (маълумоти дохorро) таѓйир дињем.

Биёед онро чамъбаст кунем

  1. Ҳангоме ки тағирёбандаҳои оддӣ битҳои арзишро нигоҳ медоранд, тағирёбандаҳои истинод битҳоро нигоҳ медоранд, ки чӣ гуна an objectро нишон медиҳанд.
  2. Истинодҳои an objectҳо танҳо барои як намуди an object эълон карда мешаванд.
  3. Ҳар як синф дар Java як навъи истинод аст.
  4. Қимати пешфарзии ҳар як тағирёбандаи истинод дар Java аст null.
  5. Stringнамунаи стандартии навъи истинод аст. Ин синф низ тағйирнопазир аст.
  6. Тағйирёбандаҳои истинод бо тағирдиҳанда finalтанҳо ба як an object бе имкони аз нав муайянкунӣ пайваст карда мешаванд.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION