JavaRush /جاوا بلاگ /Random-SD /مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب. حصو 2

مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب. حصو 2

گروپ ۾ شايع ٿيل
مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب. حصو 1 مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 2 - 1

مجموعو

25. جاوا ۾ ڪليڪشن مان ڇا مراد آهي؟

گڏ ڪرڻ هڪ فريم ورڪ آهي جيڪو ٺهيل آهي شين کي ذخيرو ڪرڻ ۽ ترتيب ڏيڻ لاءِ. هيٺين عملن کي انجام ڏيڻ لاء استعمال ڪيو:
  • ڳولا؛
  • ترتيب ڏيڻ
  • هٿرادو
  • اضافي؛
  • حذف ڪرڻ.
گڏ ڪرڻ واري فريم ورڪ لاءِ سڀئي ڪلاس ۽ انٽرفيس java.utilپيڪيج ۾ آهن.

26. ڪليڪشن فريم ورڪ ۾ ڪھڙا ڪلاس ۽ انٽرفيس موجود آھن؟

انٽرفيس:
  • جمع؛
  • فهرست؛
  • مقرر؛
  • نقشو؛
  • ترتيب ڏنل سيٽ؛
  • ترتيب ڏنل نقشو؛
  • قطار.
ڪلاس:
  • فهرستون:
    1. ArrayList;
    2. ڳنڍيل لسٽ؛
    3. ویکٹر (منسوخ ٿيل).
  • سيٽ:
    1. هيش سيٽ؛
    2. LinkedHashSet؛
    3. وڻن جو سيٽ.
  • نقشا:
    1. HashMap
    2. وڻن جو نقشو
    3. HashTable (منسوخ ٿيل)
    4. LinkedHashMap
  • قطار
    1. ترجيحي قطار.

27. مجموعن ۾ ترتيب ڏنل ۽ ترتيب ڏنل مان ڇا مراد آهي؟

حڪم ڏنو:

هن جو مطلب اهو آهي ته اهي شيون جيڪي مجموعي ۾ ذخيرو ٿيل آهن انهن جي مجموعي ۾ شامل ڪيل قدرن تي ٻڌل آهن. هن طريقي سان اسان هڪ مخصوص ترتيب ۾ مجموعي مان ويلز ذريعي ٻيهر ڪري سگهون ٿا. ٻين لفظن ۾، هن جو مطلب اهو آهي ته مجموعي جي عناصر کي پنهنجي مخصوص ترتيب آهي، جنهن جي مطابق اهي ترتيب ڏنل آهن. بهتر سمجھڻ لاء، ھڪڙو مجموعو جيڪو حڪم نه ڏنو ويو آھي ان جي عناصر کي بي ترتيب ترتيب ۾ ذخيرو ڪري ٿو. مثال طور، سيٽ.

ترتيب ڏنل:

هن جو مطلب اهو آهي ته عناصر جو هڪ گروپ گڏ ڪيل عنصر جي ڊيٽا جي بنياد تي مجموعي ۾ ترتيب ڏنل آهي. اهو آهي، نه رڳو گڏ ڪرڻ جو حڪم ڏنو ويو آهي، پر عناصر جي ترتيب پڻ انهن جي قيمتن تي منحصر آهي. اهو آرڊر تبديل ٿي سگهي ٿو جيڪڏهن توهان مختلف عنصر جي قيمت سان ترتيب ڏيو.

28. لسٽ انٽرفيس سان ڪهڙا مجموعا آهن؟ توهان فهرست سان ڪيئن ڪم ڪندا آهيو؟

ھڪڙي شيٽ ۾ عناصر جا قدر انھن جي انڊيڪس تي ٻڌل آھن- اھي انڊيڪس جي ترتيب سان ترتيب ڏنل آھن. عناصر جي ورجائي اجازت ڏني وئي آهي (يعني، توهان ساڳئي اعتراض کي ڪيترائي ڀيرا گڏ ڪري سگهو ٿا ۽ اهو ٺيڪ ٿي ويندو).

ArrayList:

سڀ کان عام مجموعو. لازمي طور تي، اهو هڪ صف آهي متحرڪ طور تي وڌائڻ واري سائيز سان. صف جي سائيز کي منظم ڪرڻ جو ڪم گڏ ڪرڻ سان گڏ آهي. اهو اسان لاءِ سمجهڻ ضروري آهي ته اڪثر ڪيسن ۾ اهو ئي آهي جيڪو اسان کي استعمال ڪرڻ جي ضرورت آهي. خاصيتون:
  • تيز ڳولا ۽ تڪڙو انڊيڪس ڳولا؛
  • مجموعو انڊيڪس طرفان ترتيب ڏنل آهي، پر ترتيب ڏنل نه آهي؛
  • 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()

HashMap:

  • نه ترتيب ڏنل يا ترتيب ڏنل؛
  • استعمال ڪيو وڃي ته ترتيب ۽ ترتيب اهم نه آهن؛
  • null key کي سپورٽ ڪري ٿو.
مثال:
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 آهي قيمت لاءِ جڳهه رکندڙ سان. پاڻ ڏسو؛)
  • شيون شامل ڪرڻ لاءِ hashCode استعمال ڪري ٿو؛
  • اهو استعمال ٿيڻ گهرجي جڏهن توهان کي منفرد شين جي ضرورت آهي ۽ انهن جي ترتيب اهم ناهي.
مثال:
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 جو ترتيب ڏنل نسخو؛
  • سڀني عناصر لاء ٻيڻو ڳنڍيل فهرست کي سپورٽ ڪري ٿو؛
  • ان کي استعمال ڪريو جڏھن اوھان کي اوھان جي iteration ۾ حڪم جي ضرورت آهي.
مثال:
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. استثنا ڇا آهي؟

Exception — это проблема, которая может возникнуть в runtime. Это исключительная ситуация, которая возникает из-за Howих-то причин. Диаграмма наследования исключений выглядит так (нужно знать ее назубок ;) ): مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 2 - 3На диаграмме видно, что в целом все исключения делятся на две группы — exceptions и error. Error — используются JVM для отображения ошибок, после которых работа applications уже не имеет смысла. Например StackOverFlowError, которая говорит, что стек заполнен и программа уже не может работать. Exception — исключения, которые генерируются программно в codeе. Есть разные исключения, проверяемые и непроверяемые, но главное, что они есть, и их можно перехватить и продолжить работу applications. Exceptions, в свою очередь, еще делятся на тех, кто наследуется от RuntimeException и других наследников Exception. В рамках этого вопроса информации достаточно. О том, что такое проверяемые / непроверяемые исключения, поговорим ниже.

32. Как JVM обрабатывает исключения?

Как это работает? Как только где-то создается исключение, runtime создает Exception Object (обозначим How ExcObj). В нем хранится вся необходимая для работы информация — само исключение, которое вызывалось и место, где это произошло. Creation ExcObj и передача в runtime есть ничто иное How “выбрасывание исключения”. ExcObj содержит методы, по которым можно дойти до место создания исключения. Это множество методов называется Call Stack. Далее, runtime система ищет метод в Call Stack, который сможет обработать наше исключение. Если он таки находит соответствующий обработчик, то есть тип исключения совпадает с типом в обработчике, все хорошо. Если не находит, то runtime передает всё в default exception handler, который подготавливает ответ и завершает работу. Как это выглядит наглядно:
/**
* Пример, в котором показываются две опции — когда находится обработчик для исключения и когда нет.
*/
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();
       }
   }
}
В нашем случае CallStack схематично будет иметь вид:

randomThrower() => populateString() => main(String[] args)
Есть две опции: случайным образом будет выброшено одно or другое исключение. Для 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. Как программистам обрабатывать исключения?

В вопросах выше уже использовались те or иные ключевые слова для работы с исключениями, теперь нужно поговорить о них более подробно. Какие есть ключевые слова?
  • try
  • catch
  • throw
  • throws
  • finally
Важно отметить, что catch, throw и throws можно использовать только с java.lang.Throwable. С другими типами работать это не будет. Now обсудим именно try, catch и finally.
  • 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ان کي بلڪل ساڳيء طرح استعمال ڪريو ته جيئن ڪنهن ٻئي کي اڳ ۾ ئي اهو مسئلو آهي: ڊي

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 ۽ Error اڻ چيڪ ٿيل آهن. مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 2 - 4هيٺ ڏنل جاوا پروگرام تي غور ڪريو. ڪوڊ گڏ ڪري ٿو ٺيڪ، پر هڪ استثنا اڇلائي ٿو جڏهن هلائڻ 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