JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ ڊيٽا جا قسم جا حوالا

جاوا ۾ ڊيٽا جا قسم جا حوالا

گروپ ۾ شايع ٿيل
جاوا نحو کي سمجھڻ کان سواءِ، ھڪڙو سنجيده ڊولپر بڻجڻ ناممڪن آھي، تنھنڪري اڄ اسين نحو سکڻ جاري رکون ٿا. گذريل مضمونن مان هڪ ۾ اسان پرائمري متغيرن جي باري ۾ ڳالهايو هو، پر جيئن ته متغير جا ٻه قسم آهن، اڄ اسين جاوا ۾ ٻئي قسم جي حوالي سان ڳالهائينداسين. پوء اهو ڇا آهي؟ جاوا ۾ ريفرنس ڊيٽا جا قسم ڇو گهربل آهن؟ جاوا ۾ ڊيٽا جا قسم جا حوالا - 1اچو ته تصور ڪريون ته اسان وٽ ٽي وي شئي آھي ڪجھ خاصيتن سان، جھڙوڪ چينل نمبر، آواز جو حجم ۽ جھنڊو:
public class TV {
   int numberOfChannel;
   int soundVolume;
   boolean isOn;
}
ڪيئن هڪ سادي قسم وانگر، intهن ڊيٽا کي محفوظ ڪري سگهي ٿو؟ اچو ته ياد رکون: ھڪڙو متغير int4 بائيٽ آھي. پر اندر هڪ ئي قسم جا ٻه متغير (4 بائيٽ + 4 بائيٽ) آهن، ۽ پڻ boolean(+1 بائيٽ)... ڪل - 4 کان 9، پر ضابطي جي طور تي، گهڻي معلومات ڪنهن شئي ۾ ذخيرو ٿيل آهي. ڇا ڪجي؟ توھان ڪنھن شئي کي متغير ۾ نٿا رکي سگھو. هن نقطي تي اسان جي ڪهاڻي ۾، ​​حوالا متغير ظاهر ٿيندا آهن. حوالو متغير ميموري جي جڳھ جو پتو ذخيرو ڪري ٿو جنھن ۾ ھڪڙو خاص اعتراض واقع آھي. اھو آھي، اھو ھڪڙو "ڪاروبار ڪارڊ" آھي ھڪڙي پتي سان، جنھن سان اسين پنھنجي اعتراض کي حصيداري ياداشت ۾ ڳولي سگھون ٿا ۽ ان سان ڪجھھ ھلائڻ کي انجام ڏئي سگھون ٿا. جاوا ۾ ڪنهن به اعتراض جو حوالو هڪ حوالو متغير آهي. اھو اھو آھي جيڪو اسان جي ٽي وي اعتراض سان نظر ايندو:
TV telly = new TV();
اسان ٽائيپ ٽي وي جي ھڪڙي قسم جي ھڪڙي نالي سان tellyھڪڙي قسم جي ٽي وي جي ٺاھيل شئي جي لنڪ کي سيٽ ڪيو. اهو آهي، JVM ٽي وي اعتراض لاء هيپ تي ميموري مختص ڪري ٿو، ان کي ٺاهي ٿو ۽ ميموري ۾ ان جي مقام تي پتو، ان کي متغير ۾ رکي ٿو telly، جيڪو اسٽيڪ تي ذخيرو ٿيل آهي. توھان ميموري بابت وڌيڪ پڙھي سگھو ٿا، يعني اسٽيڪ ۽ ٻيون گھڻيون مفيد معلومات، ھن ليڪچر ۾ . هڪ قسم جي ٽي وي جو هڪ قسم ۽ هڪ قسم جي ٽي وي جو هڪ اعتراض، ڇا توهان نوٽيس ڪيو؟ اهو بغير ڪنهن سبب جي ناهي: هڪ خاص قسم جي شين کي لازمي طور تي ساڳئي قسم جا متغير هجڻ گهرجن (وراثت ۽ انٽرفيس جي عملن کي ڳڻڻ نه، پر هاڻي اسان هن کي حساب ۾ نه ٿا وٺي رهيا آهيون). آخرڪار، اسان شيشي ۾ سوپ وجھڻ وارا نه آهيون، ڇا اسان آهيون؟ اهو ظاهر ٿئي ٿو ته اسان جو اعتراض هڪ ٽي وي آهي، ۽ ان لاء حوالو متغير هڪ ڪنٽرول پينل وانگر آهي. هن ريموٽ ڪنٽرول کي استعمال ڪندي اسان پنهنجي اعتراض ۽ ان جي ڊيٽا سان رابطو ڪري سگهون ٿا. مثال طور، اسان جي ٽي وي لاء خاصيتون مقرر ڪريو:
telly.isOn = true;
telly.numberOfChannel = 53;
telly.soundVolume = 20;
هتي اسان ڊٽ آپريٽر کي استعمال ڪيو آهي .رسائي ۽ استعمال ڪرڻ شروع ڪرڻ لاءِ اعتراض جي اندروني عنصرن کي جيڪو متغير ڏانهن اشارو ڪري ٿو. مثال طور، پهرين لائن ۾ اسان متغير کي ٻڌايو telly: ”اسان کي isOnان شئي جو هڪ اندروني متغير ڏيو جنهن جو توهان حوالو ڪري رهيا آهيو ۽ ان کي درست ڪريو“ (اسان لاءِ ٽي وي آن ڪريو).

ريفرنس متغيرن کي ٻيهر بيان ڪرڻ

اچو ته چئون ته اسان وٽ هڪ حوالن جي قسم جا ٻه متغير آهن ۽ اهي شيون جن ڏانهن اشارو ڪن ٿا:
TV firstTV = new TV();
TV secondTV = new TV();
جيڪڏهن اسان لکون ٿا:
firstTV = secondTV;
ان جو مطلب اهو ٿيندو ته اسان پهرين متغير کي هڪ قدر جي طور تي مقرر ڪيو آهي ايڊريس جي ڪاپي (ايڊريس بٽس جي قيمت) ٻئي اعتراض ڏانهن، ۽ هاڻي ٻئي متغير ٻئي اعتراض ڏانهن اشارو ڪن ٿا (ٻين لفظن ۾، ساڳئي لاء ٻه ريموٽ ڪنٽرول. ٽي وي). ساڳئي وقت، پهريون اعتراض بغير ڪنهن متغير جي ڇڏي ويو جيڪو ان ڏانهن اشارو ڪري ٿو. نتيجي طور، اسان وٽ ھڪڙو اعتراض آھي جنھن تائين پھچائي نٿو سگھجي، ڇاڪاڻ⁠تہ متغير ان لاء ھڪڙو مشروط ڌاڳو ھو، جنھن کان سواء اھو گندگي ۾ تبديل ٿئي ٿو، صرف ياداشت ۾ ڪوڙ آھي ۽ جاء وٺي ٿو. هي اعتراض بعد ۾ گندي ڪليڪٽر طرفان ياداشت مان تباهه ڪيو ويندو . جاوا ۾ ڊيٽا جا قسم جا حوالا - 2توھان ڪنھن شئي سان ڳنڍڻ واري سلسلي کي ٽوڙي سگھو ٿا بغير ڪنھن ٻئي لنڪ جي:
secondTV = null;
نتيجي طور، اعتراض جي صرف هڪ لنڪ هوندي - firstTV, ۽ secondTVهاڻي ڪنهن ڏانهن اشارو نه ڪندو (جيڪو اسان کي مستقبل ۾ ٽي وي وانگر ڪنهن شئي جي لنڪ کي تفويض ڪرڻ کان روڪي نه ٿو).

اسٽرنگ ڪلاس

الڳ الڳ، مان ذڪر ڪرڻ چاهيندس String class . هي هڪ بنيادي ڪلاس آهي جيڪو اسٽوريج جي طور تي محفوظ ڪيل ڊيٽا سان گڏ ڪم ڪرڻ ۽ ڪم ڪرڻ لاءِ ٺهيل آهي. مثال:
String text = new String("This TV is very loud");
هتي اسان هڪ اسٽرنگ پاس ڪيو آهي جيڪو اعتراض جي ڪنسٽرڪٽر ۾ محفوظ ڪيو وڃي. پر ائين ڪو نه ٿو ڪري. آخرڪار، تار ٺاهي سگھجن ٿيون:
String text = "This TV is very loud";
گهڻو وڌيڪ آسان، صحيح؟ استعمال جي مقبوليت جي لحاظ کان، Stringاهو ابتدائي قسمن کان گهٽ نه آهي، پر اهو اڃا تائين هڪ طبقو آهي، ۽ متغير جيڪو ان ڏانهن اشارو ڪري ٿو، اهو ابتدائي قسم نه آهي، پر هڪ حوالو قسم آهي. اسان Stringوٽ تارن کي ڳنڍڻ جي اها شاندار صلاحيت آهي:
String text = "This TV" + " is very loud";
نتيجي طور، اسان متن کي ٻيهر حاصل ڪنداسين: This TV is very loud, ڇاڪاڻ ته ٻن لائينن کي هڪ مڪمل ۾ گڏ ڪيو ويندو، ۽ متغير هن مڪمل متن ڏانهن اشارو ڪندو. هڪ اهم nuance اهو آهي ته Stringهي هڪ ناقابل قابل طبقو آهي. هن جو ڇا مطلب آهي؟ اچو ته هي مثال وٺون:
String text = "This TV";
text = text + " is very loud";
اهو لڳي ٿو ته هر شيء سادو آهي: اسان هڪ متغير جو اعلان ڪريون ٿا، ان کي هڪ قدر ڏيو. ايندڙ لائن تي اسان ان کي تبديل ڪريون ٿا. پر اسان واقعي تبديل نه ڪندا آهيون. جيئن ته هي هڪ ناقابل بدلو طبقو آهي، ٻئي لڪير تي شروعاتي قيمت تبديل نه ڪئي وئي آهي، پر هڪ نئين ٺاهي وئي آهي، جنهن جي نتيجي ۾ پهرين تي مشتمل آهي + " is very loud".

حوالو مستقل

ابتدائي قسمن بابت مضمون ۾، اسان مستقل جي موضوع تي ڳالهايو. هڪ حوالو متغير ڪيئن ٿيندو جڏهن اسان ان کي حتمي قرار ڏيون ٿا ؟
final TV telly = new TV();
توهان شايد سوچيو ته اهو اعتراض کي ناقابل بدلائي ڇڏيندو. پر نه، اهو سچ ناهي. جاوا ۾ ڊيٽا جا قسم جا حوالا - 3ھڪڙو حوالو متغير ھڪڙي موڊيفائر سان finalھڪڙي خاص شئي سان پابند ڪيو ويندو بغير ان کي ڪنھن به طريقي سان بند ڪرڻ جي صلاحيت کان سواء (ان کي ٻيهر بيان ڪريو يا ان کي برابر ڪريو null). اھو آھي، ھڪڙي متغير جي قيمت مقرر ڪرڻ کان پوء، ڪوڊ جھڙوڪ:
telly = new TV();
يا
telly = null;
گڏ ڪرڻ جي غلطي جو سبب بڻجندو. اهو آهي، finalاهو صرف لنڪ تي عمل ڪري ٿو، ۽ اعتراض تي ڪو به اثر نه آهي. جيڪڏهن اسان شروعاتي طور تي ان کي تبديل ڪري سگهون ٿا، اسان بغير ڪنهن پريشاني جي ان جي اندروني حالت کي تبديل ڪري سگهون ٿا:
telly.soundVolume = 30;
ڪڏهن ڪڏهن، متغيرن کي حتمي طور نامزد ڪيو ويو آهي جيتوڻيڪ طريقي جي دليلن ۾!
public void enableTV (final TV telly){
   telly.isOn = true;
}
اهو ان ڪري ڪيو ويو آهي ته جيئن لکڻ جي طريقي جي عمل دوران اهي دلائل ختم نه ٿي سگهن ۽، مطابق، گهٽ مونجهارو پيدا ڪن. ڇا جيڪڏهن اسان finalهڪ حوالو متغير کي رد ڪيو آهي جيڪو هڪ ناقابل قابل اعتراض ڏانهن اشارو ڪري ٿو؟ مثال String:
final String PASSWORD = "password";
نتيجي طور، اسان حاصل ڪنداسين مستقل، هڪ ابتدائي قسم جي مستقلن جو هڪ اينالاگ، ڇاڪاڻ ته هتي اسان نه ته حوالن کي ٻيهر بيان ڪري سگهون ٿا ۽ نه ئي اعتراض جي اندروني حالت (اندروني ڊيٽا) کي تبديل ڪري سگهون ٿا.

اچو ته ان جو خلاصو

  1. جڏهن ته سادو متغير قدر بِٽ اسٽور ڪري ٿو، حوالو متغير اسٽور بِٽ جيڪي نمائندگي ڪن ٿا ته هڪ شئي کي ڪيئن حاصل ڪيو وڃي ٿو.
  2. اعتراض جي حوالن کي صرف هڪ قسم جي اعتراض لاء قرار ڏنو ويو آهي.
  3. جاوا ۾ ڪو به ڪلاس ھڪڙو حوالو قسم آھي.
  4. جاوا ۾ ڪنهن به ريفرنس متغير جو ڊفالٽ قدر آهي null.
  5. Stringريفرنس جي قسم جو هڪ معياري مثال آهي. هي طبقو پڻ ناقابل تبديلي آهي.
  6. ريفرنس متغير هڪ موڊيفائر سان finalصرف هڪ اعتراض سان پابند آهن بغير ڪنهن ريفائنيشن جي امڪان جي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION