CodeGym /جاوا بلاگ /Random-UR /جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن
John Squirrels
سطح
San Francisco

جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن

گروپ میں شائع ہوا۔
ہائے! آج کے سبق میں، ہم جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن کے بارے میں بات کریں گے۔ ہم ایک سادہ مثال سے شروع کریں گے۔ تصور کریں کہ آپ کمپیوٹر گیم ڈویلپر ہیں۔ اگر آپ 90 کی دہائی میں پلے بڑھے ہیں اور اس دور کے گیم کنسولز کو یاد کرتے ہیں، تو آپ کو شاید معلوم ہوگا کہ ان میں کسی چیز کی کمی تھی جسے ہم آج قدر کی نگاہ سے دیکھتے ہیں — گیمز کو بچانے اور لوڈ کرنے کی صلاحیت :) اگر نہیں، تو تصور کریں! جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن - 1مجھے ڈر ہے کہ آج ان صلاحیتوں کے بغیر کھیل برباد ہو جائے گا! ویسے بھی، کھیل کو 'محفوظ' کرنے اور 'لوڈ' کرنے کا کیا مطلب ہے؟ ٹھیک ہے، ہم روزمرہ کا مطلب سمجھتے ہیں: ہم کھیل کو اسی جگہ سے جاری رکھنا چاہتے ہیں جہاں سے ہم نے چھوڑا تھا۔ ایسا کرنے کے لیے، ہم ایک مخصوص 'چیک پوائنٹ' بناتے ہیں جسے ہم بعد میں گیم لوڈ کرنے کے لیے استعمال کرتے ہیں۔ لیکن آرام دہ اور پرسکون گیمر کے بجائے پروگرامر کا کیا مطلب ہے؟ جواب آسان ہے: ہم اپنے پروگرام کی حالت کو بچاتے ہیں۔ مان لیں کہ آپ اسپین کو حکمت عملی کے کھیل میں کھیل رہے ہیں۔ آپ کے گیم میں ریاست ہے: ہر ایک کے پاس کون سے علاقے ہیں، ہر ایک کے پاس کتنے وسائل ہیں، کیا اتحاد موجود ہے اور کس کے ساتھ، کون جنگ میں ہے، وغیرہ۔ یہ معلومات، ہمارے پروگرام کی حالت، ڈیٹا کو بحال کرنے اور گیم کو جاری رکھنے کے لیے کسی نہ کسی طرح محفوظ کی جانی چاہیے۔ جیسا کہ یہ ہوتا ہے، سیریلائزیشن اور ڈی سیریلائزیشن اس کے لیے استعمال ہونے والے میکانزم ہیں۔ جاوا میں سیریلائزیشن بائٹس کی ترتیب کے طور پر کسی چیز کی حالت کو بچانے کا عمل ہے۔ جاوا میں ڈیسیریلائزیشن ان بائٹس سے کسی چیز کو بحال کرنے کا عمل ہے۔ کسی بھی جاوا آبجیکٹ کو بائٹ کی ترتیب میں تبدیل کیا جا سکتا ہے۔ ہمیں اس کی ضرورت کیوں ہے؟ ہم نے بارہا کہا ہے کہ پروگرام خود سے موجود نہیں ہیں۔ اکثر، وہ ایک دوسرے کے ساتھ بات چیت کرتے ہیں، ڈیٹا کا تبادلہ کرتے ہیں، وغیرہ۔ اس کے لیے بائٹ فارمیٹ آسان اور موثر ہے۔ مثال کے طور پر، ہم اپنی SavedGame کلاس کی کسی چیز کو بائٹس کی ترتیب میں تبدیل کر سکتے ہیں، ان بائٹس کو نیٹ ورک پر دوسرے کمپیوٹر میں منتقل کر سکتے ہیں، اور پھر دوسرے کمپیوٹر پر ان بائٹس کو جاوا آبجیکٹ میں تبدیل کر سکتے ہیں! یہ مشکل لگتا ہے، ہہ؟ ایسا لگتا ہے کہ یہ سب کرنا مشکل ہوگا: / خوشی سے، ایسا نہیں ہے! :) جاوا میں، سیریلائز ایبل انٹرفیس سیریلائزیشن کے عمل کے لیے ذمہ دار ہے۔ یہ انٹرفیس انتہائی آسان ہے: آپ کو اسے استعمال کرنے کے لیے کسی ایک طریقہ کو لاگو کرنے کی ضرورت نہیں ہے! دیکھیں کہ گیمز کو بچانے کے لیے ہماری کلاس کتنی آسان ہے:
import java.io.Serializable;
import java.util.Arrays;

public class SavedGame implements Serializable {

   private static final long serialVersionUID = 1L;

   private String[] territoryInfo;
   private String[] resourceInfo;
   private String[] diplomacyInfo;

   public SavedGame(String[] territoryInfo, String[] resourceInfo, String[] diplomacyInfo){
       this.territoryInfo = territoryInfo;
       this.resourceInfo = resourceInfo;
       this.diplomacyInfo = diplomacyInfo;
   }

   public String[] getTerritoryInfo() {
       return territoryInfo;
   }

   public void setTerritoryInfo(String[] territoryInfo) {
       this.territoryInfo = territoryInfo;
   }

   public String[] getResourceInfo() {
       return resourceInfo;
   }

   public void setResourceInfo(String[] resourceInfo) {
       this.resourceInfo = resourceInfo;
   }

   public String[] getDiplomacyInfo() {
       return diplomacyInfo;
   }

   public void setDiplomacyInfo(String[] diplomacyInfo) {
       this.diplomacyInfo = diplomacyInfo;
   }

   @Override
   public String toString() {
       return "SavedGame{" +
               "territoryInfo=" + Arrays.toString(territoryInfo) +
               ", resourceInfo=" + Arrays.toString(resourceInfo) +
               ", diplomacyInfo=" + Arrays.toString(diplomacyInfo) +
               '}';
   }
}
علاقوں، وسائل اور سفارت کاری کے بارے میں معلومات کے لیے تین صفیں ذمہ دار ہیں، اور سیریلائز ایبل انٹرفیس جاوا مشین کو بتاتا ہے: ' سب کچھ ٹھیک ہے اگر اس کلاس کی اشیاء کو سیریلائز کیا جا سکتا ہے '۔ ایک انٹرفیس کے بغیر ایک انٹرفیس عجیب لگتا ہے :/ یہ کیوں ضروری ہے؟ اس سوال کا جواب اوپر دیا گیا ہے: اس کی ضرورت صرف جاوا مشین کو ضروری معلومات فراہم کرنے کے لیے ہے۔ پچھلے سبق میں، ہم نے مختصراً مارکر انٹرفیس کا ذکر کیا۔ یہ خاص معلوماتی انٹرفیس ہیں جو ہماری کلاسوں کو اضافی معلومات کے ساتھ نشان زد کرتے ہیں جو مستقبل میں جاوا مشین کے لیے کارآمد ہوں گے۔ ان کے پاس کوئی طریقہ نہیں ہے جس پر آپ عمل درآمد کریں۔ یہاں سیریلائز ایبل ہے - ایسا ہی ایک انٹرفیس۔ یہاں ایک اور اہم نکتہ ہے: ہمیں نجی جامد آخری طویل سیریل ورشن یو آئی ڈی متغیر کی ضرورت کیوں ہے جس کی وضاحت ہم نے کلاس میں کی ہے؟ یہ فیلڈ سیریلائزڈ کلاس کا منفرد ورژن شناخت کنندہ پر مشتمل ہے۔ سیریلائز ایبل انٹرفیس کو لاگو کرنے والی ہر کلاس کا ایک ورژن شناخت کنندہ ہوتا ہے۔ اس کا تعین کلاس کے مواد — فیلڈز اور ان کے ڈیکلریشن آرڈر، اور طریقوں اور ان کے ڈیکلریشن آرڈر کی بنیاد پر کیا جاتا ہے۔ اور اگر ہم اپنی کلاس میں فیلڈ کی قسم اور/یا فیلڈز کی تعداد کو تبدیل کرتے ہیں، تو ورژن شناخت کنندہ فوری طور پر بدل جاتا ہے۔ جب کلاس کو سیریل کیا جاتا ہے تو سیریل ورژن یو آئی ڈی بھی لکھا جاتا ہے ۔ جب ہم ڈی سیریلائز کرنے کی کوشش کرتے ہیں، یعنی کسی چیز کو بائٹ سیکوئنس سے بحال کرتے ہیں، تو serialVersionUID کی قدر کا موازنہ ہمارے پروگرام میں کلاس کے serialVersionUID کی قدر سے کیا جاتا ہے ۔ اگر اقدار مماثل نہیں ہیں، تو ایک java.io.InvalidClassException پھینک دیا جائے گا۔ ہم ذیل میں اس کی ایک مثال دیکھیں گے۔ ایسے حالات سے بچنے کے لیے، ہم اپنی کلاس کے لیے دستی طور پر ورژن شناخت کنندہ سیٹ کرتے ہیں۔ ہمارے معاملے میں، یہ صرف 1 کے برابر ہوگا (آپ اپنی پسند کا کوئی دوسرا نمبر استعمال کرسکتے ہیں)۔ ٹھیک ہے، اب وقت آگیا ہے کہ ہم اپنے SavedGame آبجیکٹ کو سیریلائز کرنے کی کوشش کریں اور دیکھیں کہ کیا ہوتا ہے!
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Main {

   public static void main(String[] args) throws IOException {

       // Create our object
       String[] territoryInfo = {"Spain has 6 provinces", "Russia has 10 provinces", "France has 8 provinces"};
       String[] resourceInfo = {"Spain has 100 gold", "Russia has 80 gold", "France has 90 gold"};
       String[] diplomacyInfo = {"France is at war with Russia, Spain has taken a neutral position"};

       SavedGame savedGame = new SavedGame(territoryInfo, resourceInfo, diplomacyInfo);

       // Create 2 streams to serialize the object and save it to a file
       FileOutputStream outputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\save.ser");
       ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);

       // Save the game to a file
       objectOutputStream.writeObject(savedGame);

       // Close the stream and release resources
       objectOutputStream.close();
   }
}
جیسا کہ آپ دیکھ سکتے ہیں، ہم نے 2 سلسلے بنائے ہیں: FileOutputStream اور ObjectOutputStream ۔ پہلا جانتا ہے کہ فائل میں ڈیٹا کیسے لکھنا ہے، اور دوسرا اشیاء کو بائٹس میں تبدیل کرتا ہے۔ آپ نے پہلے ہی اسی طرح کی نیسٹڈ تعمیرات دیکھی ہیں، مثال کے طور پر، پچھلے اسباق میں نیا BufferedReader(new InputStreamReader(...)) ، تاکہ وہ آپ کو خوفزدہ نہ کریں :) دو سلسلے کی یہ زنجیر بنا کر، ہم دونوں کام انجام دیتے ہیں: ہم SavedGame آبجیکٹ کو بائٹس کی ترتیب میں تبدیل کرتے ہیں اور writeObject() طریقہ استعمال کرکے اسے فائل میں محفوظ کرتے ہیں ۔ اور، ویسے، ہم نے دیکھا بھی نہیں کہ ہمیں کیا ملا! یہ فائل کو دیکھنے کا وقت ہے! *نوٹ: فائل کو پہلے سے بنانا ضروری نہیں ہے۔ اگر مخصوص نام والی فائل موجود نہیں ہے، تو یہ خود بخود بن جائے گی* اور اس کے مندرجات یہ ہیں: ¬н sr SavedGame [ diplomacyInfot [Ljava/lang/String؛ [ resourceInfoq ~ [ territoryInfoq ~ xpur [Ljava.lang. String;¬ТVзй{G xp t pФрРнция РІРСЋРµС, СЃ Р РСссией, " етаuq ~ t "РЈ Р˜СЃРїР°РЅРё 100 Р·РслоС,Р°t РЈ Р РѕСЃСЃСЃРёР 80 ▪▪️ анции 8 دن کہ ہمارے پروگرام نے کام نہیں کیا : ( درحقیقت، اس نے کام کیا۔ آپ کو یاد ہے کہ ہم نے فائل میں بائٹس کی ایک ترتیب بھیجی تھی، نہ کہ صرف ایک شے یا متن، ٹھیک ہے، یہ بائٹ کی ترتیب کی طرح دکھائی دیتی ہے :) یہ ہمارا ہے۔ محفوظ کردہ گیم! اگر ہم اپنے اصل مقصد کو بحال کرنا چاہتے ہیں، یعنی وہ کھیل شروع کرنا اور جاری رکھنا جہاں سے ہم نے چھوڑا تھا، تو ہمیں الٹا عمل کی ضرورت ہے: ڈی سیریلائزیشن۔ ہمارے لیے ایسا لگتا ہے:
import java.io.*;

public class Main {

   public static void main(String[] args) throws IOException, ClassNotFoundException {

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\save.ser");
       ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

       SavedGame savedGame = (SavedGame) objectInputStream.readObject();

       System.out.println(savedGame);
   }
}
اور یہاں نتیجہ ہے! SavedGame{territoryInfo=[اسپین کے 6 صوبے ہیں، روس کے 10 صوبے ہیں، فرانس کے 8 صوبے ہیں]، resourceInfo=[اسپین کے پاس 100 سونا ہے، روس کے پاس 80 سونا ہے، فرانس کے پاس 90 سونا ہے]، diplomacyInfo=[فرانس روس کے ساتھ جنگ ​​میں ہے، سپین نے غیرجانبدار پوزیشن حاصل کر لی ہے]} بہترین! ہم پہلے اپنے گیم کی حالت کو فائل میں محفوظ کرنے میں کامیاب ہوئے، اور پھر اسے فائل سے بحال کرنے میں۔ اب ہم وہی کام کرنے کی کوشش کرتے ہیں، لیکن ہم اپنی SavedGame کلاس سے ورژن شناخت کنندہ کو ہٹا دیں گے۔ ہم اپنی دونوں کلاسوں کو دوبارہ نہیں لکھیں گے۔ ان کا کوڈ ایک جیسا ہوگا۔ ہم صرف SavedGame کلاس سے نجی جامد آخری طویل سیریل VersionUID کو ہٹا دیں گے۔ سیریلائزیشن کے بعد ہمارا مقصد یہ ہے: ¬н sr SavedGameі€MіuOM‰ [ diplomacyInfot [Ljava/lang/String;[ resourceInfoq ~ [ territoryInfoq ~ xpur ‚ СЃ Р РСссией, Р˜СЃїР°РЅРёСЏ Р·°РЅСЏР»° . ~спании 100 Р ▪▪▪▪▪▪▪▪▪▪▪▪▪ сРІРёРЅС †RёР№t %РЈ Р РССЃСЃёРё 10 првинцийt &R¤¤СЂ°RЅС†Рёё 8 سیر جب ہم اسے دیکھنے کی کوشش کرتے ہیں کہ کیا ہوتا ہے InvalidClassException: مقامی کلاس غیر مطابقت پذیر: stream classdesc serialVersionUID = - 196410440475012755, local class serialVersionUID = -6675950253085108747 ویسے، ہم نے ایک اہم چیز کھو دی ہے، ظاہر ہے، سٹرنگز اور پرائمیٹوز کو آسانی سے سیریلائز کیا جاتا ہے: جاوا کے پاس یقینی طور پر کچھ بلٹ ان میکانزم موجود ہے، لیکن اگر اس کے لیے ہماری فیلڈز قابل قدر نہیں ہیں ۔ بلکہ دوسری اشیاء کے حوالے؟ مثال کے طور پر، آئیے اپنی SavedGame کلاس کے ساتھ کام کرنے کے لیے علیحدہ TerritoryInfo ، ResourceInfo اور DiplomacyInfo کلاس بنائیں۔
public class TerritoryInfo {

   private String info;

   public TerritoryInfo(String info) {
       this.info = info;
   }

   public String getInfo() {
       return info;
   }

   public void setInfo(String info) {
       this.info = info;
   }

   @Override
   public String toString() {
       return "TerritoryInfo{" +
               "info='" + info + '\'' +
               '}';
   }
}

public class ResourceInfo {

   private String info;

   public ResourceInfo(String info) {
       this.info = info;
   }

   public String getInfo() {
       return info;
   }

   public void setInfo(String info) {
       this.info = info;
   }

   @Override
   public String toString() {
       return "ResourceInfo{" +
               "info='" + info + '\'' +
               '}';
   }
}

public class DiplomacyInfo {

   private String info;

   public DiplomacyInfo(String info) {
       this.info = info;
   }

   public String getInfo() {
       return info;
   }

   public void setInfo(String info) {
       this.info = info;
   }

   @Override
   public String toString() {
       return "DiplomacyInfo{" +
               "info='" + info + '\'' +
               '}';
   }
}
اور اب ہمیں ایک سوال کا سامنا ہے: اگر ہم اپنی SavedGame کلاس کو سیریلائز کرنا چاہتے ہیں تو کیا ان تمام کلاسز کو سیریلائز کرنا چاہیے ؟
import java.io.Serializable;
import java.util.Arrays;

public class SavedGame implements Serializable {

   private TerritoryInfo territoryInfo;
   private ResourceInfo resourceInfo;
   private DiplomacyInfo diplomacyInfo;

   public SavedGame(TerritoryInfo territoryInfo, ResourceInfo resourceInfo, DiplomacyInfo diplomacyInfo) {
       this.territoryInfo = territoryInfo;
       this.resourceInfo = resourceInfo;
       this.diplomacyInfo = diplomacyInfo;
   }

   public TerritoryInfo getTerritoryInfo() {
       return territoryInfo;
   }

   public void setTerritoryInfo(TerritoryInfo territoryInfo) {
       this.territoryInfo = territoryInfo;
   }

   public ResourceInfo getResourceInfo() {
       return resourceInfo;
   }

   public void setResourceInfo(ResourceInfo resourceInfo) {
       this.resourceInfo = resourceInfo;
   }

   public DiplomacyInfo getDiplomacyInfo() {
       return diplomacyInfo;
   }

   public void setDiplomacyInfo(DiplomacyInfo diplomacyInfo) {
       this.diplomacyInfo = diplomacyInfo;
   }

   @Override
   public String toString() {
       return "SavedGame{" +
               "territoryInfo=" + territoryInfo +
               ", resourceInfo=" + resourceInfo +
               ", diplomacyInfo=" + diplomacyInfo +
               '}';
   }
}
ٹھیک ہے، پھر! آئیے اس کی جانچ کریں! ابھی کے لیے، ہم سب کچھ ویسا ہی چھوڑ دیں گے اور SavedGame آبجیکٹ کو سیریلائز کرنے کی کوشش کریں گے۔
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Main {

   public static void main(String[] args) throws IOException {

       // Create our object
       TerritoryInfo territoryInfo = new TerritoryInfo("Spain has 6 provinces, Russia has 10 provinces, France has 8 provinces");
       ResourceInfo resourceInfo = new ResourceInfo("Spain has 100 gold, Russia has 80 gold, France has 90 gold");
       DiplomacyInfo diplomacyInfo =  new DiplomacyInfo("France is at war with Russia, Spain has taken a neutral position");


       SavedGame savedGame = new SavedGame(territoryInfo, resourceInfo, diplomacyInfo);

       FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\save.ser");
       ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);

       objectOutputStream.writeObject(savedGame);

       objectOutputStream.close();
   }
}
نتیجہ: تھریڈ "مین" میں استثنا java.io.NotSerializableException: DiplomacyInfo اس نے کام نہیں کیا! تو، یہاں ہمارے سوال کا جواب ہے. جب کسی آبجیکٹ کو سیریلائز کیا جاتا ہے، تو اس کے مثال کے متغیر کے ذریعہ حوالہ کردہ تمام اشیاء کو سیریلائز کیا جاتا ہے۔ اور اگر وہ اشیاء دیگر اشیاء کا بھی حوالہ دیتے ہیں، تو وہ بھی سیریلائز ہوتے ہیں۔ اور ہمیشہ کے لیے۔ اس سلسلہ میں تمام کلاسز کا سیریلائز ہونا ضروری ہے ، بصورت دیگر ان کو سیریلائز کرنا ناممکن ہو جائے گا اور ایک استثناء دیا جائے گا۔ ویسے، یہ سڑک کے نیچے مسائل پیدا کر سکتا ہے. مثال کے طور پر، اگر ہمیں سیریلائزیشن کے دوران کسی کلاس کے حصے کی ضرورت نہیں ہے تو ہمیں کیا کرنا چاہیے؟ یا اگر ہمیں لائبریری کے حصے کے طور پر 'وراثت کے ذریعے' اپنی TerritoryInfo کلاس مل جائے تو کیا ہوگا؟ اور مزید فرض کریں کہ یہ سیریلائز نہیں ہے اور، اس کے مطابق، ہم اسے تبدیل نہیں کر سکتے۔ اس کا مطلب یہ ہوگا کہ ہم اپنی SavedGame کلاس میں TerritoryInfo فیلڈ شامل نہیں کر سکتے ، کیونکہ پھر SavedGame کی پوری کلاس غیر سیریلائز ہو جائے گی! یہ ایک مسئلہ ہے: / جاوا میں، اس قسم کا مسئلہ عارضی مطلوبہ الفاظ سے حل ہوتا ہے۔ اگر آپ اس کلیدی لفظ کو اپنی کلاس کے کسی فیلڈ میں شامل کرتے ہیں، تو اس فیلڈ کو سیریلائز نہیں کیا جائے گا۔ آئیے اپنی SavedGame کلاس کے کسی ایک فیلڈ کو عارضی بنانے کی کوشش کریں ، اور پھر ہم کسی ایک چیز کو سیریلائز اور بحال کریں گے۔ جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن - 2
import java.io.Serializable;

public class SavedGame implements Serializable {

   private transient TerritoryInfo territoryInfo;
   private ResourceInfo resourceInfo;
   private DiplomacyInfo diplomacyInfo;

   public SavedGame(TerritoryInfo territoryInfo, ResourceInfo resourceInfo, DiplomacyInfo diplomacyInfo) {
       this.territoryInfo = territoryInfo;
       this.resourceInfo = resourceInfo;
       this.diplomacyInfo = diplomacyInfo;
   }

   // ...getters, setters, toString()...
}



import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Main {

   public static void main(String[] args) throws IOException {

       // Create our object
       TerritoryInfo territoryInfo = new TerritoryInfo("Spain has 6 provinces, Russia has 10 provinces, France has 8 provinces");
       ResourceInfo resourceInfo = new ResourceInfo("Spain has 100 gold, Russia has 80 gold, France has 90 gold");
       DiplomacyInfo diplomacyInfo =  new DiplomacyInfo("France is at war with Russia, Spain has taken a neutral position");


       SavedGame savedGame = new SavedGame(territoryInfo, resourceInfo, diplomacyInfo);

       FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\save.ser");
       ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);

       objectOutputStream.writeObject(savedGame);

       objectOutputStream.close();
   }
}


import java.io.*;

public class Main {

   public static void main(String[] args) throws IOException, ClassNotFoundException {

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\save.ser");
       ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

       SavedGame savedGame = (SavedGame) objectInputStream.readObject();

       System.out.println(savedGame);

       objectInputStream.close();


   }
}
اور نتیجہ یہ ہے: SavedGame{territoryInfo=null, resourceInfo=ResourceInfo{info='اسپین کے پاس 100 گولڈ، روس کے پاس 80 گولڈ، فرانس کے پاس 90 گولڈ'}، diplomacyInfo=DiplomacyInfo{info='فرانس روس اور اسپین کے ساتھ جنگ ​​میں ہے۔ نے ایک غیر جانبدار پوزیشن لی ہے'}} اس نے کہا، ہمیں اس سوال کا جواب مل گیا کہ عارضی فیلڈ کو کیا قدر تفویض کی جائے گی۔ اسے ڈیفالٹ ویلیو تفویض کیا جاتا ہے۔ اشیاء کے لیے، یہ null ہے ۔ اس موضوع پر آپ کتاب 'ہیڈ فرسٹ جاوا' میں ایک بہترین باب پڑھ سکتے ہیں، اس پر توجہ دیں :)
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION