5-modul · 10-dars: HttpClient · Gson · Reflection · Annotations

Daraja: O'rta

HttpClient · Gson · Reflection · Annotations. Java kutubxonalari va Stream bo‘yicha nazariya, amaliy namuna va mustaqil mashq.

Tushuntirish

## Dars maqsadi HttpClient · Gson · Reflection · Annotations tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.

## Nazariya Eski (Java 1.0/1.1) tarmoq classlari: `URL` — manzilni ifodalaydi, `URLConnection` — o'sha manzilga ulanib ma'lumot o'qish/yozish imkonini beradi.

Eski API noqulay, faqat sinxron (blocking), HTTP/2 va async ni qo'llamaydi. Java 11 `HttpClient` zamonaviy, async va HTTP/2 li.

## Intervyuga tayyorgarlik ### URL va URLConnection classlari qanday classlar? Eski (Java 1.0/1.1) tarmoq classlari: `URL` — manzilni ifodalaydi, `URLConnection` — o'sha manzilga ulanib ma'lumot o'qish/yozish imkonini beradi.

### Nima uchun URL/URLConnection bo'lsa ham yangi http api qo'shildi? Eski API noqulay, faqat sinxron (blocking), HTTP/2 va async ni qo'llamaydi. Java 11 `HttpClient` zamonaviy, async va HTTP/2 li.

### HttpClient nima? Java 11 dagi (`java.net.http`) zamonaviy HTTP klienti — sinxron/asinxron so'rovlar, HTTP/2 va WebSocket ni qo'llab-quvvatlaydi.

### HttpClient-ning eski Networking API dan afzalligi? Async (CompletableFuture), HTTP/2, WebSocket, sodda va zamonaviy builder-uslub API, kamroq kod.

### GSON library nima uchun kerak? Google kutubxonasi — Java obyektini JSON ga (serialize) va JSON ni obyektga (deserialize) aylantirish uchun.

### Custom Serializer va Custom Deserializer nima uchun kerak? Standart o'girish mos kelmaganda (maxsus sana formati, maydon nomlari) obyekt↔JSON jarayonini o'zimiz boshqarish uchun.

### TypeAdapter nima? GSON da bitta tur uchun serialize va deserialize mantiqini birga, samarali (stream asosida) belgilovchi class.

### Reflection nima? Dastur bajarilish vaqtida class, method, field haqidagi ma'lumotni tekshirish va ularni dinamik chaqirish/o'zgartirish imkoni.

### Reflection api nima uchun kerak? Runtime da class tuzilmasini tekshirish, obyekt yaratish, method chaqirish, field o'qish/yozish uchun — framework va kutubxonalar (Spring, Hibernate, Jackson) asosi.

### Reflection api-ning asosiy classlari qaysi? `Class`, `Method`, `Field`, `Constructor` (`java.lang.reflect` paketida).

### Reflection api-ni qachon ishlatish kerak? Umumiy (generic) framework, DI, ORM, serializatsiya, test vositalari yozishda; oddiy kodda ehtiyotkorlik bilan — sekin va tur xavfsizligini buzadi.

### Java-da Annotation nima? Kodga (class, method, field) qo'shiladigan metama'lumot (`@Override` kabi) — compiler yoki runtime uchun ko'rsatma/belgi.

### Annotationlarning qanday turlari bor? Marker (a'zosiz), single-value va full/multi-value annotatsiyalar. Manbaga ko'ra: built-in, meta-annotation va custom.

### @Override annotatsiyasining vazifasi nima? Method superclass/interface methodini haqiqatan override qilayotganini bildiradi; noto'g'ri bo'lsa compiler xato beradi.

### @FunctionalInterface annotatsiyasining vazifasi nima? Interface faqat bitta abstract methodli (functional) ekanini kafolatlaydi; buzilsa compile xatosi beradi.

### @Deprecated annotatsiyasining vazifasi nima? Element eskirgan (ishlatmaslik tavsiya etiladi) ekanini bildiradi; ishlatilsa ogohlantirish beradi.

### @SuppressWarnings annotatsiyasining vazifasi nima? Compiler ning ma'lum ogohlantirishlarini (masalan `unchecked`, `deprecation`) o'chirish uchun.

### @SafeVarargs annotatsiyasining vazifasi nima? Generic varargs bilan bog'liq «unchecked/heap pollution» ogohlantirishini bostirish — dasturchi amal xavfsizligini kafolatlaganda.

### Qanday qilib Custom Annotation yaratamiz? `@interface` kalit so'zi bilan; `@Retention` (qachon amal qiladi) va `@Target` (qayerga qo'llanadi) meta-annotatsiyalari bilan sozlanadi.

## Versiya va aniqlik Java misollari Java 17 bazasiga mo‘ljallangan. JDK/JRE paketlash usuli distributivga bog‘liq; JVM bayt-kodni interpretatsiya va JIT orqali bajarishi mumkin. GC uchun aniq bajarilish vaqtiga kafolat yo‘q; finalization resurs yopish usuli emas. Thread stop/suspend/resume kabi eski metodlar amaliy yechim emas. Koddagi import, klass yoki tashqi kutubxona kontekstini tekshiring.

Manbadagi 17 dars oldingi o‘quv arxividagi 10 guruhga birlashtirilgan: Lombok/Faker va Stream/Collectors hamda HttpClient/Gson/Reflection/Annotations birgalikda o‘rganiladi.

## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/5-module.md) [Rasmiy qo‘llanma](https://dev.java/learn/) [Sizning avvalgi savol-javob arxivingiz](https://lightyer.uz/java/interview.html)

Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.

Kod misoli

var type = String.class;
System.out.println(type.getSimpleName());
var method = type.getMethod("substring", int.class);
System.out.println(method.invoke("Java", 1)); // ava
// Gson/HttpClient alohida dependency/timeout va DTO siyosati bilan ishlatiladi.

Keng tarqalgan xatolar

Mashqlar

Teglar: pdp, nazariya, modul-05

Interaktiv ko'rinish (viktorina, izohlar, tarix)