JavaRush /جاوا بلاگ /Random-UR /سرفہرست 50 جاوا کور انٹرویو کے سوالات اور جوابات۔ حصہ 2

سرفہرست 50 جاوا کور انٹرویو کے سوالات اور جوابات۔ حصہ 2

گروپ میں شائع ہوا۔
سرفہرست 50 جاوا کور انٹرویو کے سوالات اور جوابات۔ حصہ 1 سرفہرست 50 جاوا کور انٹرویو کے سوالات اور جوابات۔  حصہ 2 - 1

مجموعے

25. جاوا میں کلیکشنز سے کیا مراد ہے؟

مجموعہ ایک ایسا فریم ورک ہے جو اشیاء کو ذخیرہ کرنے اور ان میں ہیرا پھیری کے لیے ڈیزائن کیا گیا ہے۔ مندرجہ ذیل کارروائیوں کو انجام دینے کے لئے استعمال کیا جاتا ہے:
  • تلاش
  • چھانٹنا
  • ہیرا پھیری
  • اضافہ
  • حذف کرنا
کلیکشن فریم ورک کے لیے تمام کلاسز اور انٹرفیس java.utilپیکیج میں ہیں۔

26. کلیکشن فریم ورک میں کون سی کلاسز اور انٹرفیس دستیاب ہیں؟

انٹرفیس:
  • مجموعہ;
  • فہرست؛
  • سیٹ;
  • نقشہ؛
  • ترتیب شدہ سیٹ؛
  • ترتیب شدہ نقشہ؛
  • قطار.
کلاسز:
  • فہرستیں:
    1. ArrayList;
    2. لنکڈ لسٹ؛
    3. ویکٹر (فرسودہ)۔
  • سیٹ:
    1. ہیش سیٹ؛
    2. LinkedHashSet؛
    3. ٹری سیٹ۔
  • نقشے:
    1. ہیش میپ
    2. ٹری میپ
    3. ہیش ٹیبل (فرسودہ)
    4. لنکڈ ہیش میپ
  • قطار
    1. ترجیحی قطار۔

27. مجموعہ میں ترتیب اور ترتیب سے کیا مراد ہے؟

حکم دیا:

اس کا مطلب یہ ہے کہ جو اشیاء مجموعہ میں محفوظ کی جاتی ہیں وہ مجموعہ میں شامل کردہ اقدار پر مبنی ہوتی ہیں۔ اس طرح ہم مجموعہ کی اقدار کے ذریعے ایک مخصوص ترتیب میں اعادہ کر سکتے ہیں۔ دوسرے لفظوں میں، اس کا مطلب یہ ہے کہ مجموعہ کے عناصر کی اپنی مخصوص ترتیب ہوتی ہے جس کے مطابق وہ ترتیب پاتے ہیں۔ بہتر تفہیم کے لیے، ایک مجموعہ جس کا آرڈر نہیں دیا گیا ہے اپنے عناصر کو بے ترتیب ترتیب میں محفوظ کرتا ہے۔ مثال کے طور پر، سیٹ.

ترتیب دیا گیا:

اس کا مطلب یہ ہے کہ عناصر کے ایک گروپ کو جمع کرنے والے عنصر کے ڈیٹا کی بنیاد پر مجموعہ میں ترتیب دیا گیا ہے۔ یعنی نہ صرف جمع کا حکم دیا جاتا ہے بلکہ عناصر کی ترتیب بھی ان کی اقدار پر منحصر ہوتی ہے۔ اگر آپ مختلف عنصر کی قدر کے مطابق ترتیب دیتے ہیں تو یہ ترتیب تبدیل ہو سکتی ہے۔

28. فہرست انٹرفیس کے ساتھ کون سے مجموعے ہیں؟ آپ فہرست کے ساتھ کیسے کام کرتے ہیں؟

شیٹ میں عناصر کی قدریں ان کے اشاریہ پر مبنی ہوتی ہیں — وہ اشاریہ کے حساب سے ترتیب دی جاتی ہیں۔ عناصر کی تکرار کی اجازت ہے (یعنی آپ ایک ہی چیز کو کئی بار مجموعہ میں شامل کر سکتے ہیں اور یہ ٹھیک رہے گا)۔

صفوں کی فہرست:

سب سے عام مجموعہ۔ بنیادی طور پر، یہ متحرک طور پر پھیلتے ہوئے سائز کے ساتھ ایک صف ہے۔ صف کے سائز کو منظم کرنے کا کام مجموعہ پر منحصر ہے۔ ہمارے لیے یہ سمجھنا ضروری ہے کہ زیادہ تر معاملات میں ہمیں یہی استعمال کرنے کی ضرورت ہے۔ خصوصیات:
  • تیز تلاش اور فوری انڈیکس تلاش؛
  • مجموعہ انڈیکس کے ذریعہ ترتیب دیا گیا ہے، لیکن ترتیب نہیں دیا گیا ہے۔
  • RandomAccess انٹرفیس کو نافذ کرتا ہے۔
  • آہستہ آہستہ فہرست کے وسط میں شامل کرنا۔
مثال:
public class A {

   public static void main(String[] args) {
       ArrayList names = new ArrayList<>();
       names.add("John");
       names.add("John");
       names.add("Roman");
       names.add("Ivan");
   }

}
>> آؤٹ پٹ

   [John, John, Roman, Ivan]
آؤٹ پٹ سے پتہ چلتا ہے کہ یہ دہرائے جانے والے عناصر ہیں۔ وہ اس ترتیب میں دکھائے جاتے ہیں جس میں وہ ریکارڈ کیے گئے تھے۔ اور کیا پڑھنا ہے؟ ہاں، بہت ساری معلومات موجود ہیں، آپ کو JavaRush کو چھوڑنے کی بھی ضرورت نہیں ہے:

منسلک فہرست:

یہ ایک ایسا مجموعہ ہے جس میں ہر عنصر کا پچھلے اور اگلے عناصر سے ربط ہوتا ہے۔ یہ لنکس آپ کو ایک عنصر سے دوسرے عنصر میں جانے کی اجازت دیتے ہیں۔ ایک عنصر کو شامل کرتے وقت، پچھلے اور اگلے عناصر کے لنکس آسانی سے بدل جاتے ہیں: سرفہرست 50 جاوا کور انٹرویو کے سوالات اور جوابات۔  حصہ 2 - 2
  • عناصر ایک دوسرے سے جڑے ہوئے ہیں، یعنی دوگنا منسلک فہرست نافذ کی گئی ہے۔
  • آپریشن کی مجموعی رفتار ArrayList کے مقابلے میں نمایاں طور پر کم ہے۔
  • ایک صف کے وسط میں بڑی تعداد میں داخل کرنے اور حذف کرنے کے لیے ایک بہترین انتخاب؛
  • قطار اور ڈیک لسٹ انٹرفیس کو لاگو کرتا ہے، اور اس وجہ سے کام کرنے کے ان کے طریقے ہیں۔
مثال:
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("One");
linkedList.add("Two");
linkedList.add("Three");

29. ہمیں نقشہ جمع کرنے اور اس کے نفاذ کے بارے میں بتائیں؟

نقشہ کلیدی قدر کا مجموعہ ہے۔ ایک منفرد کلید اور ایک قدر ہے جو اس قدر سے ملتی ہے۔ کلید کی انفرادیت کا تعین کرنے کے لیے equals()بھی طریقے استعمال کیے جاتے ہیں۔hashcode()

ہیش میپ:

  • ترتیب یا حکم نہیں؛
  • استعمال کیا جاتا ہے اگر ترتیب اور چھانٹنا اہم نہیں ہے۔
  • null کلید کی حمایت کرتا ہے۔
مثال:
public class CollectionExample {

   public static void main(String[] args) {
       HashMap positions = new HashMap<>();
       positions.put("junior", "Ivan");
       positions.put("middle", "Roman");
       positions.put("senior", "Vasily");
       positions.put("team lead", "Anton");
       positions.put("arthitect", "Andrew");
       positions.put("senior", "John");
       System.out.println(positions);
   }
}

// вывод в консоль
// {junior=Ivan, middle=Roman, senior=John, team lead=Anton, arthitect=Andrew}
چابیاں ہمیشہ منفرد ہوتی ہیں، اس لیے صرف ایک سینئر ریکارڈ کیا جاتا ہے۔

LinkedHashMap:

  • اندراج آرڈر کو برقرار رکھتا ہے؛
  • HashMap سے سست؛
  • iteration HashMap کے مقابلے میں تیز تر ہونے کی امید ہے۔
مثال:
public class CollectionExample {

   public static void main(String[] args) {
       LinkedHashMap<String, String> positions = new LinkedHashMap<>();
       positions.put("junior", "Ivan");
       positions.put("middle", "Roman");
       positions.put("senior", "Vasily");
       positions.put("team lead", "Anton");
       positions.put("arthitect", "Andrew");
       positions.put("senior", "John");
       System.out.println(positions);
   }
}

// вывод в консоль
// {junior=Ivan, middle=Roman, senior=John, team lead=Anton, arthitect=Andrew}

درخت کا نقشہ:

نقشہ کا نفاذ جو اندراجات کو ان کی کلیدوں کے قدرتی ترتیب کے مطابق ترتیب دیتا ہے، یا اس سے بھی بہتر، موازنہ کار کا استعمال کرتے ہوئے اگر نقشہ بننے کے وقت کنسٹرکٹر میں فراہم کیا جاتا ہے۔ مثال:
  1. موازنہ کے بغیر

    public class CollectionExample {
    
       public static void main(String[] args) {
           TreeMap<Integer, String> positions = new TreeMap<>();
           positions.put(1, "Ivan");
           positions.put(3, "Roman");
           positions.put(2, "Vasily");
           positions.put(10, "Anton");
           positions.put(7, "Andrew");
           positions.put(1, "John");
           System.out.println(positions);
       }
    }
    
    // вывод в консоль
    // {1=John, 2=Vasily, 3=Roman, 7=Andrew, 10=Anton}
  2. موازنہ کرنے والے کے ساتھ

    public class CollectionExample {
    
       public static void main(String[] args) {
           //используем реализацию Strategy Pattern'a и добавим компаратор:
           TreeMap<Integer, String> positions = new TreeMap<>(Comparator.reverseOrder());
           positions.put(1, "Ivan");
           positions.put(3, "Roman");
           positions.put(2, "Vasily");
           positions.put(10, "Anton");
           positions.put(7, "Andrew");
           positions.put(1, "John");
           System.out.println(positions);
       }
    }
    
    // вывод в консоль
    // {10=Anton, 7=Andrew, 3=Roman, 2=Vasily, 1=John}
ہم دیکھتے ہیں کہ صعودی ترتیب میں چھانٹنا معیاری کے طور پر لاگو کیا جاتا ہے، لیکن اسے کنسٹرکٹر میں موازنہ شامل کرکے تبدیل کیا جاسکتا ہے۔ TreeMap کو یہاں اچھی طرح سے بیان کیا گیا ہے ۔

30. ہمیں سیٹ کلیکشن اور اس کے نفاذ کے بارے میں بتائیں؟

سیٹ منفرد عناصر کا ایک مجموعہ ہے، اور یہ اس کی اہم خصوصیت ہے۔ یعنی سیٹ ایک جیسے عناصر کو دہرانے کی اجازت نہیں دیتا۔ یہاں یہ ضروری ہے کہ جو اشیاء شامل کی جاتی ہیں ان کا ایک طریقہ نافذ ہوتا ہے equals ۔

ہیش سیٹ:

  • ترتیب یا حکم نہیں. ہڈ کے نیچے قیمت کے لیے پلیس ہولڈر کے ساتھ ایک HashMap ہے۔ خود ہی دیکھ لو ؛)
  • اشیاء کو شامل کرنے کے لیے ہیش کوڈ استعمال کرتا ہے۔
  • اسے اس وقت استعمال کیا جانا چاہئے جب آپ کو منفرد اشیاء کی ضرورت ہو اور ان کا آرڈر اہم نہ ہو۔
مثال:
public class CollectionExample {

   public static void main(String[] args) {
       HashSet<String> positions = new HashSet<>();
       positions.add("junior");
       positions.add("junior");
       positions.add("middle");
       positions.add("senior");
       positions.add("team lead");
       positions.add("architect");
       System.out.println(positions);
   }
}

// вывод в консоль
// [senior, middle, team lead, architect, junior]
یہاں آپ دیکھ سکتے ہیں کہ "جونیئر" عنصر، جو دو بار شامل کیا گیا تھا، صرف ایک مثال میں موجود ہے۔ اور ترتیب وہی نہیں ہے جو شامل کرتے وقت ہے۔

LinkedHashSet:

  • HashSet کا آرڈر شدہ ورژن؛
  • تمام عناصر کے لیے دوگنا منسلک فہرست برقرار رکھتا ہے۔
  • جب آپ کو اپنے تکرار میں آرڈر کی ضرورت ہو تو اسے استعمال کریں۔
مثال:
public class CollectionExample {

   public static void main(String[] args) {
       LinkedHashSet<String> positions = new LinkedHashSet<>();
       positions.add("junior");
       positions.add("junior");
       positions.add("middle");
       positions.add("senior");
       positions.add("team lead");
       positions.add("architect");
       System.out.println(positions);
   }
}

// вывод в консоль
// [senior, middle, team lead, architect, junior]

ٹری سیٹ:

  • دو ترتیب شدہ مجموعوں میں سے ایک؛
  • ایک سرخ سیاہ درخت کا ڈھانچہ استعمال کرتا ہے اور اس بات کو یقینی بناتا ہے کہ عناصر صعودی ترتیب میں ہیں۔
  • ہڈ کے نیچے یہ ایک TreeMap ہے جس میں اقدار پر ایک سٹب ہے۔ اور TreeSet کے عناصر TreeMap کی کلیدیں ہیں (یہ بھی دیکھیں؛))۔
مثال:
public class CollectionExample {

   public static void main(String[] args) {
       TreeSet<String> positions = new TreeSet<>();
       positions.add("junior");
       positions.add("junior");
       positions.add("middle");
       positions.add("senior");
       positions.add("team lead");
       positions.add("architect");
       System.out.println(positions);
   }
}

// вывод в консоль
// [architect, junior, middle, senior, team lead]

مستثنیات

31. استثنا کیا ہے؟

استثناء ایک مسئلہ ہے جو رن ٹائم پر ہوسکتا ہے۔ یہ ایک غیر معمولی صورتحال ہے جو کسی وجہ سے پیدا ہوتی ہے۔ استثنائی وراثت کا خاکہ اس طرح لگتا ہے (آپ کو اسے دل سے جاننا ہوگا ؛)): سرفہرست 50 جاوا کور انٹرویو کے سوالات اور جوابات۔  حصہ 2 - 3خاکہ ظاہر کرتا ہے کہ، عام طور پر، تمام مستثنیات کو دو گروپوں میں تقسیم کیا گیا ہے - استثناء اور غلطی۔ خرابی - JVMs کا استعمال غلطیوں کو ظاہر کرنے کے لیے کیا جاتا ہے جس کے بعد ایپلیکیشن کا کوئی مطلب نہیں رہتا۔ مثال کے طور پر، StackOverFlowError، جو کہتا ہے کہ اسٹیک بھرا ہوا ہے اور پروگرام مزید نہیں چل سکتا۔ استثناء - مستثنیات جو کوڈ میں پروگرام کے لحاظ سے پیدا ہوتے ہیں۔ مختلف مستثنیات ہیں، چیک شدہ اور غیر چیک شدہ، لیکن اہم بات یہ ہے کہ وہ موجود ہیں، اور انہیں پکڑا جا سکتا ہے اور ایپلیکیشن کام کرتی رہتی ہے۔ مستثنیات، بدلے میں، مزید ان میں تقسیم ہوتے ہیں جو RuntimeException اور Exception کی دیگر اولادوں سے وراثت میں آتے ہیں۔ اس مسئلے پر کافی معلومات موجود ہیں۔ ہم ذیل میں اس کے بارے میں بات کریں گے کہ چیک شدہ/غیر چیک شدہ مستثنیات کیا ہیں۔

32. JVM مستثنیات کو کیسے ہینڈل کرتا ہے؟

یہ کیسے کام کرتا ہے؟ جیسے ہی ایک استثناء کو کہیں پھینک دیا جاتا ہے، رن ٹائم ایک استثناء آبجیکٹ بناتا ہے (جسے ExcObj کہا جاتا ہے)۔ یہ کام کے لیے ضروری تمام معلومات کو محفوظ کرتا ہے - استثناء خود جو پھینکا گیا تھا اور وہ جگہ جہاں یہ ہوا تھا۔ رن ٹائم میں تخلیق ExcObjاور ترسیل "استثنیٰ پھینکنے" سے زیادہ کچھ نہیں ہے۔ ExcObjطریقوں پر مشتمل ہے جو اس جگہ تک پہنچنے کے لیے استعمال کیے جا سکتے ہیں جہاں استثناء پھینکا گیا تھا۔ طریقوں کے اس سیٹ کو کال اسٹیک کہتے ہیں۔ اگلا، رن ٹائم سسٹم کال اسٹیک میں ایک ایسا طریقہ تلاش کرتا ہے جو ہمارے استثنا کو سنبھال سکے۔ اگر اسے مناسب ہینڈلر مل جاتا ہے، یعنی استثناء کی قسم ہینڈلر کی قسم سے ملتی ہے، تو سب کچھ ٹھیک ہے۔ اگر اسے نہیں ملتا ہے، تو رن ٹائم ہر چیز کو ڈیفالٹ استثنا ہینڈلر کے پاس بھیج دیتا ہے، جو جواب تیار کرتا ہے اور باہر نکل جاتا ہے۔ یہ ایسا لگتا ہے:
/**
* Пример, в котором показываются две опции — когда находится обработчик для исключения и когда нет.
*/
class ThrowerExceptionExample {

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

       ThrowerExceptionExample example = new ThrowerExceptionExample();

       System.out.println(example.populateString());
   }

   /**
    * Здесь происходит перехват одного из возможных исключений — {@link IOException}.
    * А вот второй будет пробрасываться дальше вверх по вызову.
    */
   private String populateString() throws IllegalAccessException {
       try {
           return randomThrower();
       } catch (IOException e) {
           return "Caught IOException";
       }
   }

   /**
    * Здесь две опции: or бросается {@link IOException} or {@link IllegalAccessException}.
    * Выбирается случайным образом.
    */
   private String randomThrower() throws IOException, IllegalAccessException {
       if (new Random().nextBoolean()) {
           throw new IOException();
       } else {
           throw new IllegalAccessException();
       }
   }
}
ہمارے معاملے میں، کال اسٹیک اس طرح نظر آئے گا:

randomThrower() => populateString() => main(String[] args)
دو اختیارات ہیں: ایک یا دوسرا استثناء تصادفی طور پر پھینک دیا جائے گا۔ IOException کے لیے سب کچھ ٹھیک ہے، اگر یہ پیدا ہوتا ہے، تو کام کا نتیجہ یہ ہوگا: "Caught IOException"۔ لیکن اگر کوئی دوسرا استثناء ہے جس کے لیے کوئی ہینڈلر نہیں ہے، تو پروگرام درج ذیل آؤٹ پٹ کے ساتھ رک جائے گا:

Exception in thread "main" java.lang.IllegalAccessException
  at ThrowerExceptionExample.randomThrower(CollectionExample.java:38)
  at ThrowerExceptionExample.populateString(CollectionExample.java:24)
  at ThrowerExceptionExample.main(CollectionExample.java:15)

33. پروگرامرز مستثنیات کو کیسے ہینڈل کرتے ہیں؟

اوپر والے سوالات میں ہم مستثنیات کے ساتھ کام کرنے کے لیے کچھ مطلوبہ الفاظ استعمال کر چکے ہیں، اب ہمیں ان کے بارے میں مزید تفصیل سے بات کرنے کی ضرورت ہے۔ مطلوبہ الفاظ کیا ہیں؟
  • کوشش کریں
  • پکڑنا
  • پھینکنا
  • پھینکتا ہے
  • آخر میں
یہ نوٹ کرنا ضروری ہے کہ کیچ، تھرو اور تھرو صرف java.lang.Throwable کے ساتھ استعمال کیا جا سکتا ہے۔ یہ دوسری اقسام کے ساتھ کام نہیں کرے گا۔ اب ہم کوشش کریں، پکڑیں ​​اور آخر میں بات کریں گے۔
  • try-catch-finallyایک ایسی تعمیر ہے جو آپ کو ایک استثناء کو صحیح طریقے سے پکڑنے اور سنبھالنے کی اجازت دیتی ہے۔
  • try- صرف ایک وقت ہو سکتا ہے، جہاں منطق ہوتی ہے؛
  • catch- ایک بلاک جو کسی قسم کی رعایت حاصل کرتا ہے؛ ان میں سے بہت سے ہو سکتے ہیں۔ مثال کے طور پر، ایک ٹرائی بلاک کئی مستثنیات کو پھینک دے گا جن کا ایک دوسرے سے کوئی تعلق نہیں ہے۔
  • finally- "آخر میں" یہ بلاک۔ یہ ایک ایسا بلاک ہے جسے کسی بھی صورت میں عمل میں لایا جائے گا، قطع نظر اس کے کہ کوشش، کیچ میں کیا گیا ہو۔
یہ ایسا لگتا ہے:
try {
   // сюда передают тот code, который может вызвать исключение.
} catch (IOException e) {
   // первый catch блок, который принимает IOException и все его подтипы(потомки).
   // Например, нет file при чтении, выпадает FileNotFoundException, и мы уже соответствующе
   // обрабатываем это.
} catch (IllegalAccessException e) {
   // если нужно, можно добавить больше одного catch блока, в этом нет проблем.
} catch (OneException | TwoException e) {
   // можно даже объединять несколько в один блок
} catch (Throwable t) {
   // а можно сказать, что мы принимаем ВСЁ))))
} finally {
   // этот блок может быть, а может и не быть.
   // и он точно выполнится.
}
مثال کی تفصیل کو غور سے پڑھیں سب کچھ واضح ہو جائے گا)

34. جاوا میں پھینکنا اور پھینکنا

پھینکنا

throwاستعمال کیا جاتا ہے جب آپ کو واضح طور پر ایک نیا استثنا پیدا کرنے کی ضرورت ہو۔ یہ اپنی مرضی کے استثناء کو بنانے اور پھینکنے کے لیے استعمال ہوتا ہے۔ مثال کے طور پر توثیق سے متعلق مستثنیات۔ عام طور پر، توثیق کے لیے، وہ وراثت سے حاصل کرتے ہیں RuntimeException۔ مثال:
// пример пробрасывания исключения
throw new RuntimeException("because I can :D");
یہ ضروری ہے کہ یہ تعمیر صرف اس چیز کے ذریعہ استعمال کی جاسکتی ہے جو وراثت میں ملتی ہے Throwable۔ یعنی آپ یہ نہیں کہہ سکتے:
throw new String("How тебе такое, Илон Маск?");
اس کے بعد، تھریڈ کا کام ختم ہو جاتا ہے اور ایک ایسے ہینڈلر کی تلاش شروع ہو جاتی ہے جو اس پر کارروائی کر سکے۔ جب یہ اسے نہیں ڈھونڈتا ہے، تو یہ اس طریقہ پر جاتا ہے جس نے اسے کہا تھا، اور اس طرح تلاش کالوں کی لائن تک جائے گی جب تک کہ اسے متعلقہ ہینڈلر نہیں مل جاتا یا ایپلیکیشن کو چلنا چھوڑ دیتا ہے۔ آئیں دیکھیں:
// Пример, который демонстрирует работу throw
class ThrowExample {

   void willThrow() throws IOException {
       throw new IOException("Because I Can!");
   }

   void doSomething() {
       System.out.println("Doing something");
       try {
           willThrow();
       } catch (IOException e) {
           System.out.println("IOException was successfully handled.");
       }
   }

   public static void main(String args[]) {
       ThrowExample throwExample = new ThrowExample();
       throwExample.doSomething();
   }
}
اگر ہم پروگرام چلاتے ہیں تو ہمیں درج ذیل نتیجہ ملتا ہے:

Doing something
IOException was successfully handled.

پھینکتا ہے

throws- ایک طریقہ کار جس کے ذریعے کوئی طریقہ ایک یا زیادہ مستثنیات کو پھینک سکتا ہے۔ وہ کوما سے الگ کرکے شامل کیے جاتے ہیں۔ آئیے دیکھتے ہیں کہ یہ کتنا آسان اور آسان ہے:
private Object willThrow() throws RuntimeException, IOException, FileNotFoundException
مزید یہ کہ یہ نوٹ کرنا ضروری ہے کہ چیک شدہ اور غیر چیک شدہ دونوں مستثنیات ہوسکتے ہیں۔ بلاشبہ، غیر نشان زد مستثنیات کو شامل نہیں کیا جا سکتا throws، لیکن اچھے اخلاق دوسری صورت میں کہتے ہیں۔ اگر یہ چیک ایبلز ہیں، تو پھر وہ طریقہ استعمال کرتے ہوئے جو ان کو تیار کرتا ہے، آپ کو کسی نہ کسی طرح اس پر کارروائی کرنے کی ضرورت ہے۔ دو اختیارات ہیں:
  1. try-catchمناسب اور اوپر وراثت کی رعایت کے ساتھ لکھیں ۔
  2. اسے throwsبالکل اسی طرح استعمال کریں تاکہ کسی اور کو پہلے سے ہی یہ مسئلہ ہو: D

35. جاوا میں مستثنیات کو چیک کیا گیا اور غیر چیک کیا گیا۔

جاوا میں دو قسم کی مستثنیات ہیں - چیک شدہ اور غیر چیک شدہ۔

مستثنیات کی جانچ پڑتال:

یہ مستثنیات ہیں جو مرتب وقت پر چیک کی جاتی ہیں۔ اگر کسی طریقہ میں کچھ کوڈ کسی استثناء کے دوران چیک شدہ استثنیٰ پھینکتا ہے، تو طریقہ کو یا تو اسے استعمال کرکے پروسیس کرنا چاہیے try-catch، یا اسے آگے بھیجنا چاہیے۔ مثال کے طور پر، جو "/users/romankh3/image.png" راستے سے تصویر پڑھتا ہے، اسے اپ ڈیٹ کرتا ہے۔ کسی طرح سے (ہمارے لئے یہ اہم نہیں ہے) اور اسے واپس بچاتا ہے۔
class CheckedImageExample {
   public static void main(String[] args) {
       File imageFile = new File("/users/romankh3/image.png");
       BufferedImage image = ImageIO.read(imageFile);
       updateAndSaveImage(image, imageFile);
   }

   private static void updateAndSaveImage(BufferedImage image, File imageFile) {
       ImageIO.write(image, "png", imageFile);
   }
}
اس طرح کا کوڈ مرتب نہیں ہوگا، کیونکہ جامد طریقے IOException ImageIO.read()پھینکتے ہیں ، جس کی جانچ پڑتال کی جاتی ہے اور اس کے مطابق ہینڈل کرنا ضروری ہے۔ ImageIO.write()یہاں دو اختیارات ہیں جن پر ہم پہلے ہی بات کر چکے ہیں: یا تو استعمال کریں try-catch، یا آگے آگے کریں۔ بہتر انضمام کے لیے، ہم یہ اور وہ کریں گے۔ یعنی، updateAndSaveہم اسے صرف طریقہ میں آگے بھیجیں گے، اور پھر اسے بنیادی طریقہ میں استعمال کریں گے try-catch:
class CheckedImageExample {
   public static void main(String[] args) {
       File imageFile = new File("/users/romankh3/image.png");
       try {
           BufferedImage image = ImageIO.read(imageFile);
           updateAndSaveImage(image, imageFile);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }

   private static void updateAndSaveImage(BufferedImage image, File imageFile) throws IOException {
       ImageIO.write(image, "png", imageFile);
   }
}

غیر نشان زد مستثنیات:

یہ وہ مستثنیات ہیں جن کی تالیف کے مرحلے پر جانچ نہیں کی جاتی ہے۔ یعنی، ایک طریقہ RuntimeException پیدا کر سکتا ہے، لیکن مرتب کرنے والا آپ کو کسی طرح اسے سنبھالنے کی یاد نہیں دلائے گا۔ جیسا کہ ذیل میں دکھایا گیا ہے، ہمارے پاس وہ سب کچھ ہے جو RuntimeException سے وراثت میں ملتا ہے اور ایرر کو غیر چیک کیا جاتا ہے۔ سرفہرست 50 جاوا کور انٹرویو کے سوالات اور جوابات۔  حصہ 2 - 4درج ذیل جاوا پروگرام پر غور کریں۔ کوڈ ٹھیک مرتب کرتا ہے، لیکن جب run ArrayIndexOutOfBoundsException۔ مرتب کرنے والا اسے مرتب کرنے کی اجازت دیتا ہے کیونکہ ArrayIndexOutOfBoundsExceptionیہ ایک غیر چیک شدہ استثناء ہے۔ ایک صف کے ساتھ ایک عام صورت حال، جو ہو سکتی ہے:
class CheckedImageExample {
   public static void main(String[] args) {
       int[] array = new int[3];
       array[5] = 12;
   }
}
نتیجہ یہ ہوگا:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
  at main(CheckedImageExample.java:12)
ویسے، کیا آپ نے پہلے ہی دیکھا ہے کہ جاوا میں کوئی بھی مختصر نام نہیں دیتا؟ جتنا بڑا، اتنا ہی بہتر۔ وہ، اسپرنگ فریم ورک، اس میں بہت کامیاب تھا: بس کچھ BeanFactoryPostProcessor کلاس لیں)))

36. وسائل کے ساتھ کوشش کیا ہیں؟

یہ ایک ایسا طریقہ کار ہے جس کے ذریعے تمام وسائل کو صحیح طریقے سے بند کیا جانا چاہیے۔ یہ کسی طرح واضح نہیں ہے، ٹھیک ہے؟) سب سے پہلے، ایک وسیلہ کیا ہے... وسائل ایک ایسی چیز ہے، جس کے ساتھ کام کرنے کے بعد آپ کو اسے بند کرنے کی ضرورت ہے، یعنی کال کریں close()۔ وسائل سے مراد وہ تمام اشیاء ہیں جو ایک انٹرفیس کو نافذ کرتی ہیں AutoClosable، جو بدلے میں ایک انٹرفیس کو نافذ کرتی ہے Closeable۔ ہمارے لیے یہ سمجھنا ضروری ہے کہ ہر چیز ایک وسیلہ InputStreamہے اور اسے صحیح اور کامیابی کے ساتھ جاری کرنے کی ضرورت ہے۔ OutpuStreamیہی وجہ ہے کہ ہمیں try-with-resourceساخت کو استعمال کرنے کی ضرورت ہے۔ یہ اس کی طرح دکھتا ہے:
private void unzipFile(File zipFile) throws IOException {
   try(ZipInputStream zipOutputStream = new ZipInputStream(new FileInputStream(zipFile))) {
       ZipEntry zipEntry = zipOutputStream.getNextEntry();
       while (zipEntry != null) {

       }
   }
}

private void saveZipEntry(ZipEntry zipEntry) {
   // логика сохранения
}
اس مثال میں، وسیلہ ہے ZipInputStream، جس کے ساتھ کام کرنے کے بعد آپ کو اسے بند کرنا ہوگا۔ اور طریقہ کار کو کال کرنے کے بارے میں نہ سوچنے کے لیے close()، ہم صرف اس متغیر کو ٹرائی بلاک میں بیان کرتے ہیں، جیسا کہ مثال میں دکھایا گیا ہے، اور اس بلاک کے اندر ہم ہر ضروری کام کرتے ہیں۔ مثال کیا کرتی ہے؟ یہ زپ آرکائیو کو ان زپ کر دے گا۔ ایسا کرنے کے لیے آپ کو InputStream'om' استعمال کرنے کی ضرورت ہے۔ آپ ایک سے زیادہ متغیرات کی وضاحت کر سکتے ہیں؛ وہ سیمی کالون سے الگ ہوتے ہیں۔ مسئلہ کیا ہے؟ لیکن آپ finallyایک بلاک استعمال کر سکتے ہیں، آپ کہہ سکتے ہیں۔ یہاں ایک مضمون ہے جس میں اس نقطہ نظر کے ساتھ مسائل کی تفصیل ہے۔ اس میں ناکامیوں کی پوری فہرست بھی بیان کی گئی ہے جو کسی ایسے شخص پر پڑ سکتی ہے جو اس ڈیزائن کو استعمال کرنے میں کوتاہی کرتا ہے۔ میں اسے پڑھنے کا مشورہ دیتا ہوں؛) آخری حصے میں ملٹی تھریڈنگ کے موضوع پر سوالات/جوابات ہیں۔ میرا GitHub پروفائل
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION