JavaRush /Java Blogu /Random-AZ /Java-da istinad məlumat növləri

Java-da istinad məlumat növləri

Qrupda dərc edilmişdir
Java sintaksisini başa düşmədən ciddi bir tərtibatçı olmaq mümkün deyil, ona görə də bu gün biz sintaksisi öyrənməyə davam edirik. Əvvəlki məqalələrin birində biz primitiv dəyişənlər haqqında danışmışdıq, lakin iki növ dəyişən olduğundan bu gün biz ikinci növdən - Java-da istinad tiplərindən danışacağıq. Bəs bu nədir? Java-da nə üçün istinad məlumat növləri lazımdır? Java-da istinad məlumat növləri - 1Təsəvvür edək ki, kanal nömrəsi, səs səviyyəsi və bayraq kimi bəzi xüsusiyyətlərə malik bir TV obyektimiz var:
public class TV {
   int numberOfChannel;
   int soundVolume;
   boolean isOn;
}
Sadə bir tip intbu məlumatları necə saxlaya bilər? Xatırlayaq: bir dəyişən int4 baytdır. Amma içəridə eyni tipli iki dəyişən (4 bayt + 4 bayt) var, həm də boolean(+1 bayt)... Cəmi - 4-dən 9-a qədər, lakin bir qayda olaraq, obyektdə daha çox məlumat saxlanılır. Nə etməli? Bir obyekti dəyişənə qoya bilməzsiniz. Hekayəmizin bu nöqtəsində istinad dəyişənləri görünür. İstinad dəyişənləri konkret obyektin yerləşdiyi yaddaş yerinin ünvanını saxlayır. Yəni bu, obyektimizi ortaq yaddaşda tapa biləcəyimiz və onunla bəzi manipulyasiyalar edə biləcəyimiz ünvanı olan "vizit kartıdır". Java-da hər hansı bir obyektə istinad istinad dəyişənidir. Televiziya obyektimizlə belə görünəcək:
TV telly = new TV();
tellyYaradılmış TV tipli obyektə keçid adı ilə TV tipli dəyişəni təyin etdik. Yəni, JVM TV obyekti üçün yığın üzərində yaddaş ayırır, onu və yaddaşda yerləşdiyi ünvanın ünvanını yaradır, tellystekdə saxlanılan dəyişənə qoyur. Yaddaş, yəni yığın və bir çox digər faydalı məlumatlar haqqında bu mühazirə haqqında daha çox oxuya bilərsiniz . Televiziya tipli dəyişən və televizor tipli obyekt, fərq etdinizmi? Bu səbəbsiz deyil: müəyyən tipli obyektlər eyni tipdə uyğun dəyişənlərə malik olmalıdır (irsiyyət və interfeys tətbiqləri nəzərə alınmır, lakin indi biz bunu nəzərə almırıq). Axı biz stəkanlara şorba tökməyəcəyik, elə deyilmi? Belə çıxır ki, bizim obyektimiz televizordur və onun üçün istinad dəyişəni idarəetmə paneli kimidir. Bu pultdan istifadə edərək obyektimiz və onun məlumatları ilə qarşılıqlı əlaqə qura bilərik. Məsələn, televizorumuzun xüsusiyyətlərini təyin edin:
telly.isOn = true;
telly.numberOfChannel = 53;
telly.soundVolume = 20;
.Burada dəyişənin istinad etdiyi obyektin daxili elementlərinə daxil olmaq və istifadə etməyə başlamaq üçün nöqtə operatorundan istifadə etdik . Məsələn, birinci sətirdə dəyişənə dedik : “Bizə istinad etdiyiniz obyektin tellydaxili dəyişənini verin və onu doğru olaraq təyin edin” (bizim üçün televizoru yandırın).isOn

İstinad dəyişənlərinin yenidən təyin edilməsi

Tutaq ki, bizdə istinad tipli iki dəyişən və onların istinad etdiyi obyektlər var:
TV firstTV = new TV();
TV secondTV = new TV();
yazsaq:
firstTV = secondTV;
bu o deməkdir ki, biz birinci dəyişəni ikinci obyektə ünvanın surəti (ünvan bitlərinin dəyəri) dəyər kimi təyin etdik və indi hər iki dəyişən ikinci obyektə istinad edir (başqa sözlə, eyni üçün iki uzaqdan idarəetmə TV). Eyni zamanda, birinci obyekt ona istinad edən dəyişənsiz qaldı. Nəticədə, əlimizdə əldə edilə bilməyən bir obyekt var, çünki dəyişən onun üçün belə şərti bir ip idi, onsuz zibilliyə çevrilir, sadəcə yaddaşda qalır və yer tutur. Bu obyekt sonradan zibil yığan şəxs tərəfindən yaddaşdan silinəcək . Java-da İstinad Məlumat Növləri - 2Birləşdirici ipi başqa bir əlaqə olmadan bir obyektlə qıra bilərsiniz:
secondTV = null;
Nəticədə, obyektə yalnız bir keçid olacaq - firstTV, və secondTVartıq heç kimə işarə etməyəcək (bu, gələcəkdə ona TV kimi hansısa obyektə keçid təyin etməyimizə mane olmur).

String sinfi

Ayrı-ayrılıqda String sinfini qeyd etmək istərdim . Bu, sətir kimi saxlanılan məlumatların saxlanması və onlarla işləmək üçün nəzərdə tutulmuş əsas sinifdir. Misal:
String text = new String("This TV is very loud");
Burada obyektin konstruktorunda saxlanacaq sətri keçdik. Amma heç kim bunu etmir. Axı, sətirlər yaradıla bilər:
String text = "This TV is very loud";
Daha rahat, elə deyilmi? İstifadəsinin populyarlığına görə Stringo, primitiv tiplərdən geri qalmır, lakin yenə də sinifdir və ona aid olan dəyişən primitiv tip deyil, istinad tipidir. StringSətirləri birləşdirmək üçün bu gözəl qabiliyyətimiz var :
String text = "This TV" + " is very loud";
Nəticədə mətni yenidən alacağıq: This TV is very loud, çünki iki sətir bir bütövlükdə birləşdiriləcək və dəyişən bu tam mətnə ​​istinad edəcək. Əhəmiyyətli bir nüans, Stringbunun dəyişməz bir sinif olmasıdır. Bunun mənası nədi? Bu misalı götürək:
String text = "This TV";
text = text + " is very loud";
Deyəsən, hər şey sadədir: biz dəyişən elan edirik, ona dəyər veririk. Növbəti sətirdə onu dəyişdiririk. Amma biz əslində dəyişmirik. Bu dəyişməz sinif olduğundan, ikinci sətirdə ilkin qiymət dəyişdirilmir, lakin öz növbəsində birincidən ibarət olan yenisi yaradılır + " is very loud".

İstinad sabitləri

Primitiv tiplər haqqında məqalədə biz sabitlər mövzusuna toxunduq. Biz onu yekun elan etdikdə istinad dəyişəni necə davranacaq ?
final TV telly = new TV();
Bunun obyekti dəyişməz hala gətirəcəyini düşünə bilərsiniz. Amma yox, bu doğru deyil. Java-da İstinad Məlumat Növləri - 3Dəyişdiricisi olan istinad dəyişəni, finalonu heç bir şəkildə açmaq imkanı olmadan (onu yenidən təyin edin və ya ilə bərabərləşdirin) xüsusi obyektə bağlanacaq null. Yəni, belə bir dəyişənin dəyərini təyin etdikdən sonra aşağıdakı kimi kodlayın:
telly = new TV();
və ya
telly = null;
kompilyasiya xətasına səbəb olacaq. Yəni, finalo, yalnız linkdə hərəkət edir, obyektin özünə heç bir təsiri yoxdur. Başlanğıcda dəyişkənliyə malik olsaq, onun daxili vəziyyətini heç bir problem olmadan dəyişə bilərik:
telly.soundVolume = 30;
Bəzən hətta metod arqumentlərində dəyişənlər yekun olaraq təyin olunur!
public void enableTV (final TV telly){
   telly.isOn = true;
}
Bu, metodun yazılması zamanı bu arqumentləri ləğv etmək və müvafiq olaraq daha az qarışıqlıq yaratmaq üçün edilir. finalDəyişməz obyektə istinad edən istinad dəyişənini işarələsək necə olar ? Məsələn String:
final String PASSWORD = "password";
Nəticədə, biz sabit, primitiv tipli sabitlərin analoqu alacağıq, çünki burada biz nə istinadı yenidən təyin edə, nə də obyektin daxili vəziyyətini (daxili məlumat) dəyişdirə bilərik.

Gəlin ümumiləşdirək

  1. Sadə dəyişənlər dəyər bitlərini saxlayarkən, istinad dəyişənləri obyektin necə əldə edildiyini əks etdirən bitləri saxlayır.
  2. Obyekt istinadları yalnız bir növ obyekt üçün elan edilir.
  3. Java-da istənilən sinif istinad növüdür.
  4. Java-da hər hansı bir istinad dəyişənin standart dəyəri null.
  5. Stringistinad tipinin standart nümunəsidir. Bu sinif də dəyişməzdir.
  6. Dəyişdiricisi olan istinad dəyişənləri finalyenidən təyin etmə imkanı olmadan yalnız bir obyektə bağlanır.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION