JavaRush /Java блогу /Random-KY /Javaдагы маалымдама маалыматтарынын түрлөрү

Javaдагы маалымдама маалыматтарынын түрлөрү

Группада жарыяланган
Java синтаксисин түшүнбөй туруп, олуттуу иштеп чыгуучу болуу мүмкүн эмес, ошондуктан бүгүн биз синтаксисти үйрөнүүнү улантабыз. Мурунку макалалардын биринде биз примитивдик өзгөрмөлөр жөнүндө сөз кылганбыз, бирок өзгөрмөлөрдүн эки түрү бар болгондуктан, бүгүн биз экинчи түрү жөнүндө сөз кылабыз - Java тorндеги шилтеме түрлөрү. Анда бул эмне? Эмне үчүн Java'да маалымдама маалымат түрлөрү керек? Java тorндеги маалымдама маалыматтарынын түрлөрү - 1Келгиле, бизде каналдын номери, үн көлөмү жана желекчеси сыяктуу кээ бир мүнөздөмөлөрү бар сыналгы an objectи бар экенин элестетип көрөлү:
public class TV {
   int numberOfChannel;
   int soundVolume;
   boolean isOn;
}
Жөнөкөй түрү intбул маалыматты кантип сактай алат? Эсибизде болсун: бир өзгөрмө int4 byte. Бирок ичинде бир типтеги эки өзгөрмө (4 byte + 4 byte), ошондой эле boolean(+1 byte) бар... Бардыгы - 4төн 9га чейин, бирок, эреже катары, an objectте көбүрөөк маалымат сакталат. Эмне кылуу керек? Объектти өзгөрмөгө киргизе албайсыз. Биздин окуянын ушул учурда, шилтеме өзгөрмөлөр пайда болот. Шилтеме өзгөрмөлөр белгилүү бир an object жайгашкан эстутум жайгашкан жердин дарегин сактайт. Башкача айтканда, бул дареги бар "визиттик карта", анын жардамы менен an objectибизди жалпы эс тутумдан таба алабыз жана аны менен кээ бир манипуляцияларды жасай алабыз. Javaдагы кандайдыр бир an objectке шилтеме шилтеме өзгөрмө болуп саналат. Бул биздин сыналгы an objectисинде кандай болот:
TV telly = new TV();
Биз сыналгы түрүндөгү өзгөрмөнүн аталышын орноттук telly. Башкача айтканда, JVM эстутумду теле an objectи үчүн үймөктө бөлүп берет, аны жана анын эстутумдагы жайгашкан дарегин түзөт, аны tellyстекте сакталган өзгөрмөгө коет. Сиз эстутум, тактап айтканда, стек жана башка көптөгөн пайдалуу маалыматтарды бул лекциядан окуй аласыз . Телевизор түрүндөгү өзгөрмө жана сыналгы түрүндөгү an object, сиз байкадыңызбы? Бул бекеринен эмес: белгилүү бир типтеги an objectтер бир типтеги тиешелүү өзгөрмөлөргө ээ болушу керек (мурастоону жана интерфейсти ишке ашырууну эсепке албаганда, бирок азыр биз муну эске албай жатабыз). Кантсе да, биз стакандарга шорпо куюп бербейбиз, туурабы? Көрсө, биздин an object телевизор, ал үчүн шилтеме өзгөрмөсү башкаруу панелине окшош экен. Бул алыстан башкарууну колдонуу менен биз an objectибиз жана анын маалыматтары менен иштеше алабыз. Мисалы, биздин сыналгы үчүн мүнөздөмөлөрдү коюңуз:
telly.isOn = true;
telly.numberOfChannel = 53;
telly.soundVolume = 20;
.Бул жерде биз өзгөрмө тиешелүү an objectтин ички элементтерине жетүү жана аларды колдонууну баштоо үчүн чекит операторун колдондук . Мисалы, биринчи сапта биз өзгөрмөгө айттык : " Сиз шилтеме кылып жаткан an objectтин tellyички өзгөрмөсүн бизге бериңиз жана аны чындыкка коюңуз" (биз үчүн сыналгы күйгүзүңүз).isOn

Шилтеме өзгөрмөлөрдү кайра аныктоо

Келгиле, бизде шилтеме түрүндөгү эки өзгөрмө жана алар шилтеме кылган an objectтер бар дейли:
TV firstTV = new TV();
TV secondTV = new TV();
Эгерде биз жазсак:
firstTV = secondTV;
бул биз биринчи өзгөрмө мааниге даректин көчүрмөсү (дарек биттеринин мааниси) экинчи an objectке ыйгарылганыбызды билдирет, эми эки өзгөрмө тең экинчи an objectке тиешелүү (башкача айтканда, ошол эле үчүн эки алыстан башкаруу) TV). Ошол эле учурда биринчи an object ага тиешелүү өзгөрмөсүз калган. Натыйжада, бизде кирүү мүмкүн эмес an object бар, анткени өзгөрмө ага шарттуу жип болгон, ансыз ал таштандыга айланат, жөн гана эс тутумда калат жана орун ээлейт. Бул an object кийинчерээк таштанды жыйноочу тарабынан эс тутумдан жок кылынат . Java тorндеги маалымдама маалыматтарынын түрлөрү - 2Сиз башка шилтемеси жок an object менен байланыштыруучу жипти үзө аласыз:
secondTV = null;
Натыйжада, an objectке бир гана шилтеме болот - firstTV, жана secondTVмындан ары эч кимди көрсөтпөйт (бул бизге келечекте сыналгы сыяктуу кандайдыр бир an objectке шилтеме дайындоого тоскоол болбойт).

Стринг классы

Өзүнчө, мен String классын белгилегим келет . Бул сап катары сакталган маалыматтарды сактоо жана алар менен иштөө үчүн иштелип чыккан базалык класс. Мисал:
String text = new String("This TV is very loud");
Бул жерде биз an objectтин конструкторунда сактала турган сапты өткөрдүк. Бирок муну эч ким кылbyte. Анткени, саптарды түзсө болот:
String text = "This TV is very loud";
Бир топ ыңгайлуу, туурабы? Колдонуу популярдуулугу боюнча Stringал примитивдүү типтерден кем калbyte, бирок дагы эле класс болуп саналат жана ага тиешелүү болгон өзгөрмө примитивдик тип эмес, эталондук тип. Бизде Stringсаптарды бириктирүү үчүн сонун жөндөмүбүз бар:
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 тorндеги маалымдама маалыматтарынын түрлөрү - 3Модификатору бар маалымдама өзгөрмө finalаны кандайдыр бир жол менен ажыратуу мүмкүнчүлүгү жок эле белгилүү бир an objectке байланат (аны кайра аныктаңыз же ага теңеңиз null). Башкача айтканда, мындай өзгөрмөнүн маанисин койгондон кийин, төмөнкүдөй code:
telly = new TV();
же
telly = null;
компиляция катасын пайда кылат. Башкача айтканда, finalал шилтемеде гана иштейт жана an objectинин өзүнө эч кандай таасир этпейт. Бизде башында өзгөрүлүүчү болсо, анын ички абалын эч кандай көйгөйсүз өзгөртө алабыз:
telly.soundVolume = 30;
Кээде, өзгөрмөлөр метод аргументтерде да акыркы катары белгиленет!
public void enableTV (final TV telly){
   telly.isOn = true;
}
Бул ыкманы жазуу процессинде бул аргументтер жокко чыгарылбашы жана, демек, азыраак башаламандык жаратышы үчүн жасалат. finalЭгерде биз өзгөрүлгүс an objectке тиешелүү шилтеме өзгөрмөсүн белгилесек эмне болот ? Мисалы String:
final String PASSWORD = "password";
Натыйжада, биз примитивдүү типтеги константалардын аналогун алабыз, анткени бул жерде биз шилтемени кайра аныктай албайбыз да, an objectтин ички абалын да (ички маалыматтар) өзгөртө албайбыз.

Жыйынтыктап көрөлү

  1. Жөнөкөй өзгөрмөлөр маани биттерин сактаса, маалымдама өзгөрмөлөр an objectтин кантип алынарын көрсөткөн биттерди сактайт.
  2. Объектке шилтемелер 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