JavaRush /Java blogi /Random-UZ /Eng yaxshi 50 Java asosiy intervyu savollari va javoblari...

Eng yaxshi 50 Java asosiy intervyu savollari va javoblari. 2-qism

Guruhda nashr etilgan
Eng yaxshi 50 Java asosiy intervyu savollari va javoblari. 1-qism Eng yaxshi 50 Java asosiy intervyu savollari va javoblari.  2-1-qism

To'plamlar

25. Java tilidagi Collections deganda nima tushuniladi?

To'plam - bu ob'ektlarni saqlash va boshqarish uchun mo'ljallangan ramka. Quyidagi operatsiyalarni bajarish uchun foydalaniladi:
  • qidirmoq;
  • tartiblash;
  • manipulyatsiya;
  • qo'shimcha;
  • o'chirish.
To'plam ramkasi uchun barcha sinflar va interfeyslar paketda mavjud java.util.

26. Collection ramkasida qanday sinflar va interfeyslar mavjud?

Interfeyslar:
  • To'plam;
  • Ro'yxat;
  • Set;
  • Xarita;
  • Saralangan to'plam;
  • Saralangan xarita;
  • Navbat.
Sinflar:
  • Roʻyxatlar:
    1. ArrayList;
    2. LinkedList;
    3. Vektor (eskirgan).
  • To'plamlar:
    1. HashSet;
    2. LinkedHashSet;
    3. Tree Set.
  • Xaritalar:
    1. HashMap
    2. TreeMap
    3. HashTable (eskirgan)
    4. LinkedHashMap
  • Navbat
    1. Ustuvor navbat.

27. To‘plamlarda tartiblangan va tartiblangan deganda nima tushuniladi?

Buyurtma qilingan:

Bu shuni anglatadiki, to'plamda saqlanadigan narsalar to'plamga qo'shilgan qiymatlarga asoslanadi. Shunday qilib, biz to'plamdagi qiymatlarni ma'lum bir tartibda takrorlashimiz mumkin. Boshqacha qilib aytadigan bo'lsak, bu to'plam elementlarining o'ziga xos tartibiga ega ekanligini anglatadi, unga ko'ra tartibga solinadi. Yaxshiroq tushunish uchun buyurtma qilinmagan to'plam o'z elementlarini tasodifiy tartibda saqlaydi. Masalan, Set.

Saralangan:

Bu shuni anglatadiki, elementlar guruhi yig'ish elementi ma'lumotlari asosida to'plamga saralanadi. Ya'ni, nafaqat to'plam buyurtma qilinadi, balki elementlarning tartibi ham ularning qiymatlariga bog'liq. Agar siz boshqa element qiymati boʻyicha sarasangiz, bu tartib oʻzgarishi mumkin.

28. List interfeysi bilan qanday to'plamlar mavjud? List bilan qanday ishlaysiz?

Varaqdagi elementlarning qiymatlari ularning indeksiga asoslanadi - ular indeks bo'yicha tartiblangan. Elementlarning takrorlanishiga ruxsat beriladi (ya'ni, siz bir xil ob'ektni to'plamga bir necha marta qo'shishingiz mumkin va u yaxshi bo'ladi).

ArrayList:

Eng keng tarqalgan to'plam. Aslida, bu dinamik ravishda kengayadigan o'lchamga ega massiv. Massiv hajmini boshqarish vazifasi to'plamga tegishli. Ko'p hollarda biz buni ishlatishimiz kerakligini tushunishimiz muhim. Xususiyatlari:
  • tez qidiruv va tez indeks qidirish;
  • to'plam indeks bo'yicha tartiblangan, lekin tartiblanmagan;
  • RandomAccess interfeysini amalga oshiradi;
  • asta-sekin ro'yxatning o'rtasiga qo'shiladi.
Misol:
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");
   }

}
>> chiqish

   [John, John, Roman, Ivan]
Chiqish shuni ko'rsatadiki, bu takrorlanadigan elementlardir. Ular yozilgan tartibda ko'rsatiladi. Yana nimani o'qish kerak? Ha, juda ko'p ma'lumotlar bor, hatto JavaRush-dan chiqib ketishingiz shart emas:

Bog'langan ro'yxat:

Bu har bir element oldingi va keyingi elementlarga havolaga ega bo'lgan to'plamdir. Ushbu havolalar bir elementdan ikkinchisiga o'tish imkonini beradi. Element qo'shganda oldingi va keyingi elementlarga havolalar oddiygina o'zgaradi: Eng yaxshi 50 Java asosiy intervyu savollari va javoblari.  2-2 qism
  • elementlar bir-biriga bog'langan, ya'ni ikki marta bog'langan ro'yxat amalga oshiriladi;
  • ishning umumiy tezligi ArrayList-ga qaraganda sezilarli darajada past;
  • massivning o'rtasiga ko'p sonli qo'shimchalar va o'chirishlar uchun ajoyib tanlov;
  • Queue va Deque ro'yxati interfeyslarini amalga oshiradi va shuning uchun ularning ishlash usullari mavjud.
Misol:
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("One");
linkedList.add("Two");
linkedList.add("Three");

29. Xarita to'plami va uning amalga oshirilishi haqida gapirib bering?

Xarita - bu kalit-qiymatlar to'plami. Noyob kalit va shu qiymatga mos keladigan qiymat mavjud. Kalitning o'ziga xosligini aniqlash uchun usullar equals()ham qo'llaniladi .hashcode()

HashMap:

  • tartiblanmagan yoki tartiblanmagan;
  • tartib va ​​saralash muhim bo'lmasa ishlatiladi;
  • null kalitni qo'llab-quvvatlaydi.
Misol:
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}
Kalitlar har doim noyobdir, shuning uchun faqat bitta keksa qayd qilinadi.

LinkedHashMap:

  • kiritish tartibini saqlaydi;
  • HashMap dan sekinroq;
  • iteratsiya HashMap-ga qaraganda tezroq bo'lishi kutilmoqda.
Misol:
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}

TreeMap:

Yozuvlarni kalitlarning tabiiy tartibiga ko‘ra tartiblangan holda saqlaydigan yoki xarita yaratilganda konstruktorda taqdim etilgan bo‘lsa, taqqoslash vositasidan foydalangan holda xaritani amalga oshirish. Misol:
  1. Taqqoslovchisiz

    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. Taqqoslovchi bilan

    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}
Ko'rib turibmizki, o'sish tartibida tartiblash standart sifatida amalga oshiriladi, ammo buni konstruktorga solishtiruvchi qo'shish orqali o'zgartirish mumkin. TreeMap bu erda yaxshi tasvirlangan .

30. Set kollektsiyasi va uning amalga oshirilishi haqida gapirib bering?

To'plam - noyob elementlar to'plami va bu uning asosiy xususiyati. Ya'ni, Set bir xil elementlarning takrorlanishiga ruxsat bermaydi. Bu erda qo'shilgan ob'ektlar amalga oshirilgan usulga ega bo'lishi muhimdir equals .

HashSet:

  • saralanmagan yoki buyurtma qilinmagan. Kaput ostida qiymat uchun to'ldiruvchiga ega HashMap mavjud. O'zingiz ko'ring;)
  • ob'ektlarni qo'shish uchun hashCode'dan foydalanadi;
  • Uni noyob ob'ektlarga ega bo'lishingiz kerak bo'lganda va ularning tartibi muhim bo'lmaganda qo'llanilishi kerak.
Misol:
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]
Bu erda siz ikki marta qo'shilgan "kenja" element faqat bitta misolda mavjudligini ko'rishingiz mumkin. Va tartib qo'shish bilan bir xil emas.

LinkedHashSet:

  • HashSet ning buyurtma qilingan versiyasi;
  • barcha elementlar uchun ikki marta bog'langan ro'yxatni qo'llab-quvvatlaydi;
  • Iteratsiyada tartib kerak bo'lganda foydalaning.
Misol:
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]

Daraxtlar to'plami:

  • ikkita saralangan to'plamdan biri;
  • qizil-qora daraxt tuzilishidan foydalanadi va elementlarning o'sish tartibida bo'lishini ta'minlaydi;
  • Qopqoq ostida bu TreeMap bo'lib, u qiymatlar bo'yicha stubga ega. TreeSet elementlari TreeMap kalitlaridir (shuningdek qarang;)).
Misol:
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]

Istisnolar

31. Istisno nima?

Istisno - bu ish vaqtida yuzaga kelishi mumkin bo'lgan muammo. Bu ba'zi sabablarga ko'ra yuzaga keladigan istisno holat. Istisnolarning meros diagrammasi shunday ko'rinadi (siz uni yoddan bilishingiz kerak;)): Eng yaxshi 50 Java asosiy intervyu savollari va javoblari.  2-3-qismDiagramma shuni ko'rsatadiki, umuman olganda, barcha istisnolar ikki guruhga bo'lingan - istisnolar va xato. Xato - JVMlar xatolarni ko'rsatish uchun ishlatiladi, shundan so'ng dastur endi mantiqiy bo'lmaydi. Masalan, StackOverFlowError, bu stek to'lganligini va dastur endi ishlay olmasligini aytadi. Istisno - kodda dasturiy jihatdan yaratilgan istisnolar. Har xil istisnolar bor, tekshirilgan va belgilanmagan, lekin asosiysi ular mavjud va ular qo'lga olinishi va dastur ishlashni davom ettirishi mumkin. Istisnolar, o'z navbatida, RuntimeException dan meros bo'lganlarga va Istisnoning boshqa avlodlariga bo'linadi. Bu masala bo'yicha etarli ma'lumotlar mavjud. Belgilangan/belgilanmagan istisnolar haqida quyida gaplashamiz.

32. JVM istisnolarni qanday hal qiladi?

U qanday ishlaydi? Istisno biror joyga tashlansa, ish vaqti Istisno ob'ektini yaratadi (ExcObj sifatida belgilanadi). U ish uchun zarur bo'lgan barcha ma'lumotlarni saqlaydi - tashlangan istisno va u sodir bo'lgan joy. Yaratish ExcObjva ish vaqtiga o'tkazish "istisnolarni tashlash"dan boshqa narsa emas. ExcObjistisno qilingan joyga borish uchun ishlatilishi mumkin bo'lgan usullarni o'z ichiga oladi. Ushbu usullar to'plami Call Stack deb ataladi. Keyinchalik, ish vaqti tizimi Qo'ng'iroqlar to'plamida bizning istisnolarimizni hal qila oladigan usulni qidiradi. Agar u tegishli ishlov beruvchini topsa, ya'ni istisno turi ishlov beruvchidagi turga mos keladi, hammasi yaxshi. Agar u topmasa, ish vaqti hamma narsani standart istisno ishlovchisiga o'tkazadi, u javob tayyorlaydi va chiqadi. Bu shunday ko'rinadi:
/**
* Пример, в котором показываются две опции — когда находится обработчик для исключения и когда нет.
*/
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();
       }
   }
}
Bizning holatda, CallStack sxematik tarzda quyidagicha ko'rinadi:

randomThrower() => populateString() => main(String[] args)
Ikkita variant mavjud: bir yoki boshqa istisno tasodifiy tashlanadi. IOException uchun hamma narsa yaxshi, agar u yaratilgan bo'lsa, ishning natijasi quyidagicha bo'ladi: "Caught IOException". Agar ishlov beruvchi bo'lmagan ikkinchi istisno mavjud bo'lsa, dastur quyidagi chiqish bilan to'xtaydi:

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. Dasturchilar istisnolarni qanday hal qilishadi?

Yuqoridagi savollarda ba'zi kalit so'zlar istisnolar bilan ishlash uchun allaqachon ishlatilgan, endi biz ular haqida batafsilroq gapirishimiz kerak. Kalit so'zlar qanday?
  • harakat qilib ko'ring
  • tutmoq
  • tashlash
  • tashlaydi
  • nihoyat
Shuni ta'kidlash kerakki, tutish, otish va uloqtirish faqat java.lang.Throwable bilan ishlatilishi mumkin. Bu boshqa turlar bilan ishlamaydi. Endi biz sinab ko'ring, tuting va nihoyat muhokama qilamiz.
  • try-catch-finallyistisnoni to'g'ri ushlash va boshqarish imkonini beruvchi konstruktsiyadir.
  • try- faqat bir marta bo'lishi mumkin, bu erda mantiq sodir bo'ladi;
  • catch— ayrim turdagi istisnolarni oladigan blok; ularning koʻpi boʻlishi mumkin. Misol uchun, try bloki bir-biriga hech qanday aloqasi bo'lmagan bir nechta istisnolarni tashlaydi;
  • finally- "nihoyat" bu blok. Bu try, catch-da nima qilinishidan qat'i nazar, har qanday holatda bajariladigan blok.
Bu shunday ko'rinadi:
try {
   // сюда передают тот code, который может вызвать исключение.
} catch (IOException e) {
   // первый catch блок, который принимает IOException и все его подтипы(потомки).
   // Например, нет file при чтении, выпадает FileNotFoundException, и мы уже соответствующе
   // обрабатываем это.
} catch (IllegalAccessException e) {
   // если нужно, можно добавить больше одного catch блока, в этом нет проблем.
} catch (OneException | TwoException e) {
   // можно даже объединять несколько в один блок
} catch (Throwable t) {
   // а можно сказать, что мы принимаем ВСЁ))))
} finally {
   // этот блок может быть, а может и не быть.
   // и он точно выполнится.
}
Misol tavsifini diqqat bilan o'qing va hamma narsa aniq bo'ladi)

34. Java-da otish va uloqtirish

tashlash

throwaniq yangi istisno yaratish kerak bo'lganda foydalaniladi. U maxsus istisnolarni yaratish va tashlash uchun ishlatiladi. Masalan, tekshirish bilan bog'liq istisnolar. Odatda, tekshirish uchun ular dan meros oladi RuntimeException. Misol:
// пример пробрасывания исключения
throw new RuntimeException("because I can :D");
Muhimi, bu konstruksiya faqat merosxo'r bo'lgan narsa tomonidan ishlatilishi mumkin Throwable. Ya'ni, siz buni ayta olmaysiz:
throw new String("How тебе такое, Илон Маск?");
Keyinchalik, ipning ishi tugatiladi va uni qayta ishlay oladigan ishlov beruvchini qidirish boshlanadi. Agar u uni topa olmasa, uni chaqirgan usulga o'tadi va shuning uchun qidiruv mos keladigan ishlov beruvchini topmaguncha yoki dasturni ishlamay qoldirmaguncha qo'ng'iroqlar qatoriga o'tadi. Keling, qaraylik:
// Пример, который демонстрирует работу 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();
   }
}
Agar dasturni ishga tushirsak, quyidagi natijaga erishamiz:

Doing something
IOException was successfully handled.

tashlaydi

throws- usul bir yoki bir nechta istisnolarni tashlashi mumkin bo'lgan mexanizm. Ular vergul bilan ajratilgan holda qo'shiladi. Keling, bu qanchalik oson va sodda ekanligini ko'rib chiqaylik:
private Object willThrow() throws RuntimeException, IOException, FileNotFoundException
Bundan tashqari, tekshirilgan va belgilanmagan istisnolar bo'lishi mumkinligini ta'kidlash muhimdir. Albatta, belgilanmagan istisnolar ga qo'shilmasligi mumkin throws, ammo yaxshi xulq-atvor boshqacha aytadi. Agar bu tekshiriladigan bo'lsa, ularni yaratadigan usuldan foydalanib, uni qandaydir tarzda qayta ishlashingiz kerak. Ikkita variant mavjud:
  1. try-catchTegishli va yuqoridagi meros istisnosi bilan yozing .
  2. throwsXuddi shu tarzda foydalaning , shunda kimdir allaqachon bu muammoga duch keladi: D

35. Java-da tekshirilgan va belgilanmagan istisnolar

Java-da ikki xil istisnolar mavjud - belgilangan va belgilanmagan.

Tekshirilgan istisnolar:

Bu kompilyatsiya vaqtida tekshiriladigan istisnolar. Istisno paytida usuldagi ba'zi kod tekshirilgan istisnoni tashlasa, usul uni yordamida qayta ishlashi try-catchyoki uni keyingi yo'naltirishi kerak. Masalan, "/users/romankh3/image.png" yo'lidan rasmni o'qiydigan uni yangilaydi. qandaydir tarzda (biz uchun bu muhim emas) va uni qaytarib beradi.
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);
   }
}
Bunday kod kompilyatsiya qilinmaydi, chunki statik usullar IOExceptionni ImageIO.read()chiqaradi ImageIO.write(), bu tekshiriladi va shunga mos ravishda ishlov berilishi kerak. Bu erda biz yuqorida muhokama qilgan ikkita variant mavjud: yoki dan foydalaning try-catchyoki oldinga siljiting. Yaxshiroq assimilyatsiya qilish uchun biz buni va buni qilamiz. Ya'ni, updateAndSavebiz uni faqat usulda yo'naltiramiz va keyin uni asosiy usulda ishlatamiz 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);
   }
}

Belgilanmagan istisnolar:

Bular kompilyatsiya bosqichida tekshirilmagan istisnolardir. Ya'ni, usul RuntimeException yaratishi mumkin, ammo kompilyator uni qandaydir tarzda boshqarishni eslatmaydi. Quyida ko'rsatilganidek, bizda RuntimeException-dan meros bo'lgan hamma narsa bor va Xato belgilanmagan. Eng yaxshi 50 Java asosiy intervyu savollari va javoblari.  2-4 qismQuyidagi Java dasturini ko'rib chiqing. Kod yaxshi kompilyatsiya qilinadi, lekin ishga tushirilganda istisno qiladi ArrayIndexOutOfBoundsException. Kompilyator uni kompilyatsiya qilishga ruxsat beradi, chunki ArrayIndexOutOfBoundsExceptionbu tekshirilmagan istisno. Massiv bilan bog'liq umumiy holat, bu quyidagilar bo'lishi mumkin:
class CheckedImageExample {
   public static void main(String[] args) {
       int[] array = new int[3];
       array[5] = 12;
   }
}
Natija quyidagicha bo'ladi:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
  at main(CheckedImageExample.java:12)
Aytgancha, Java-da hech kim qisqa nomlar bermasligini allaqachon payqadingizmi? Qanchalik katta bo'lsa, shuncha yaxshi. U, Spring Framework, bu borada juda muvaffaqiyatli bo'ldi: shunchaki BeanFactoryPostProcessor sinfini oling)))

36. Resurslarni sinab ko'rish nima?

Bu barcha resurslarni to'g'ri yopish kerak bo'lgan mexanizmdir. Bu qandaydir tushunarsiz, to'g'rimi?) Avvalo, resurs nima... Resurs - bu ob'ekt, u bilan ishlagandan so'ng uni yopish kerak, ya'ni close(). Resurs interfeysni amalga oshiradigan barcha ob'ektlarga ishora qiladi AutoClosable, bu esa interfeysni amalga oshiradi Closeable. InputStreamBiz uchun hamma narsa resurs ekanligini OutpuStreamva to'g'ri va muvaffaqiyatli chiqarilishi kerakligini tushunish muhimdir . Aynan shuning uchun biz try-with-resourcestrukturadan foydalanishimiz kerak. Bu qanday ko'rinishga ega:
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) {
   // логика сохранения
}
Ushbu misolda resurs ZipInputStream, u bilan ishlagandan so'ng uni yopishingiz kerak bo'ladi. Va usulni chaqirish haqida o'ylamaslik uchun close()biz ushbu o'zgaruvchini misolda ko'rsatilganidek, sinab ko'rish blokida aniqlaymiz va bu blokda biz barcha kerakli narsalarni qilamiz. Misol nima qiladi? U zip arxivini ochadi. Buni amalga oshirish uchun siz "om" dan foydalanishingiz kerak InputStream. Siz bir nechta o'zgaruvchilarni belgilashingiz mumkin, ular nuqta-vergul bilan ajratiladi. Muammo nimada? Lekin siz finallyblokdan foydalanishingiz mumkin, deyishingiz mumkin. Mana, ushbu yondashuv bilan bog'liq muammolarni batafsil tavsiflovchi maqola . Bundan tashqari, ushbu dizayndan foydalanishni e'tiborsiz qoldiradigan odamga duch kelishi mumkin bo'lgan muvaffaqiyatsizliklarning to'liq ro'yxati tasvirlangan. Men uni o'qishni tavsiya qilaman;) Yakuniy qismda Multithreading mavzusi bo'yicha savollar/javoblar mavjud. Mening GitHub profilim
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION