Albatta, Java haqida o'rganayotgan bilimlaringizni GitHub `README.md` faylida tartibli va tushunarli qilib yozishga yordam beraman. Siz bergan ma'lumotlarni Markdown formatida, sarlavhalar va ro'yxatlar bilan yaxshilab strukturallashtirdim.
Mana sizning `java-docs-uz` repositoryingiz uchun tayyorlangan `README.md` fayli:
```markdown
# java-docs-uz - Java Dasturlash Tili Konspektlari
Assalomu alaykum! Bu repositoryda men Java dasturlash tili bo'yicha o'rganayotgan bilimlarimni va konspektlarimni o'zbek tilida jamlab boraman. Maqsadim - Java asoslarini tushunish va kelajakda dasturchilar hamjamiyatiga o'z hissamni qo'shish.
Har bir mavzu alohida bo'lim shaklida joylashadi.
---
## 01. Java ga Kirish
### Java Nima?
* Java - **Class yo'naltirilgan (Class-based)**, **yuqori darajadagi (high-level)** va **obyektga yo'naltirilgan (object-oriented)** dasturlash tilidir.
* U James Gosling tomonidan 1995 yilda e'lon qilingan.
### Java Tarixi
* Java dasturlash tili dastlab 1991 yilda **Sun Microsystems** kompaniyasi tomonidan yaratilgan.
* 1995 yildan u o'zining "Java" nomini olgan. Uning avvalgi nomi **Oak** bo'lgan (Oak - uzoq yashovchi daraxt turi).
* "Java" - Indoneziyada o'sadigan qahva turi nomi bo'lib, shu sababli Java logotipida qahva belgisi mavjud.
* 2010 yilda **Oracle** kompaniyasi Java dasturlash tilini sotib olgan.
* Java dasturchilari **WORA (Write Once, Run Anywhere)** shiori bilan ishlaganlar. Bu shiorning ma'nosi shuki, Java kodi bir marta yoziladi va keyin turli operatsion tizimlarda hech qanday o'zgarishsiz ishlay oladi.
* Java kodi kompilyatsiya qilinganida, u **bytecode** (bayt-kod) yaratadi. Bu bayt-kod har qanday operatsion tizimda ishlaydigan **Java Virtual Machine (JVM)** orqali bajariladi.
### Java Editions (Nashrlar)
Java dasturlash tilining 4 ta asosiy nashri (edition) mavjud:
* **Java Card:** Smart-kartalar (identifikatsiya va pasportlar) uchun.
* **Java Micro Edition (ME):** Sensorlar va robotlar kabi cheklangan resursli qurilmalar uchun.
* **Java Standard Edition (SE):** Desktop ilovalari va server tarafidagi umumiy maqsadlar uchun.
* **Java Platform, Enterprise Edition (EE):** Yirik korxona (Enterprise) va veb ilovalarini yaratish uchun.
### Java Versiyalari
* Java har yili yangi versiyalar chiqaradi.
* **LTS (Long-Term Support)** versiyalari 4 yilda bir ishlab chiqariladi va uzoq muddatli qo'llab-quvvatlashga ega bo'ladi.
### JDK Nima?
**JDK (Java Development Kit)** - Java ilovalarini yozish, kompilyatsiya qilish, disk raskadrovka qilish va ishga tushirish uchun zarur bo'lgan dasturiy ta'minot to'plami. U uchta asosiy komponentni o'z ichiga oladi:
1. **Java Language Specification (JLS):** Java tilining qoidalari va xususiyatlarini belgilaydi.
2. **Java Development Tools:** Dasturlash uchun vositalar to'plami.
3. **Java Runtime Environment (JRE):** Java ilovalarini ishga tushirish muhiti.
### Java Development Tools
JDK tarkibidagi asosiy ishlab chiqish vositalari:
* `java`: Java ilovalarini ishga tushirish uchun.
* `javac`: Java kodini bayt-kodga kompilyatsiya qilish uchun (Java compiler).
* `javadoc`: Java kodidan avtomatik ravishda hujjatlar (documentation) yaratish uchun.
* `jar`: Java sinf fayllari va boshqa resurslarni bir arxiv fayliga jamlash uchun.
* `debugger`: Dasturlardagi xatolarni topish va tuzatish uchun.
### JRE Nima?
**JRE (Java Runtime Environment)** - kompilyatsiya qilingan Java ilovalarini ishga tushirish uchun zarur bo'lgan muhit. U quyidagilarni o'z ichiga oladi:
* **JVM (Java Virtual Machine):** Java bayt-kodini bajaradigan virtual mashina.
* **Java APIs (Application Programming Interfaces):** Java kutubxonalari to'plami.
* **Class Libraries:** Standart sinf kutubxonalari.
### Java Xususiyatlari (Features)
Java ning asosiy xususiyatlari:
* **Oddiy (Simple):** O'rganish va foydalanish oson.
* **Obyektga yo'naltirilgan (Object-Oriented):** Abstraksiya, inkapsulyatsiya, merosxo'rlik va polimorfizm kabi OOP prinsiplarini qo'llab-quvvatlaydi.
* **Portativ (Portable):** Turli platformalarda ishlay oladi (WORA).
* **Platformadan mustaqil (Platform Independent):** Yozilgan kod bir operatsion tizimda kompilyatsiya qilingach, boshqa operatsion tizimlarda ham ishlay oladi.
* **Mustahkam (Robust):** Xatolarga chidamli va kuchli xotira boshqaruvi (garbage collection) mavjud.
* **Xavfsiz (Secure):** Keng qamrovli xavfsizlik mexanizmlariga ega.
* **Interpretatsiya qilinadigan (Interpreted):** Bayt-kod JVM tomonidan interpretatsiya qilinadi.
* **Yuqori unumdorlik (High Performance):** JIT (Just-In-Time) kompilyatorlari tufayli yuqori unumdorlikka erishadi.
* **Ko'p oqimli (Multithreaded):** Bir vaqtning o'zida bir nechta vazifani bajarish imkonini beradi.
* **Taqsimlangan (Distributed):** Tarmoq ilovalarini yaratish uchun qulay.
* **Dinamik (Dynamic):** Ishlash vaqtida moslashuvchan.
### "Hello, World!" Misoli
Bu yerda oddiy "Hello, World!" dasturini ko'rib chiqamiz:
```java
// Save this file as HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!"); // Prints the text to the console
}
}
```
Dasturni terminalda ishga tushirish uchun:
```bash
javac HelloWorld.java # Java kodini kompilyatsiya qilish
java HelloWorld # Kompilyatsiya qilingan bayt-kodni ishga tushirish
```
Yuqoridagi kod konsolga `Hello, World!` matnini chiqaradi.
### `String[] args` ni Tushunish
`public static void main(String[] args)` metodidagi `String[] args` qismi dastur ishga tushirilganda terminaldan argumentlarni qabul qilish uchun ishlatiladi. Bu metodga string massivi sifatida argumentlar uzatilishi mumkin.
Quyidagi kod misolida buni ko'rib chiqamiz:
```java
// Save this file as HelloWorldArgs.java
public class HelloWorldArgs {
public static void main(String[] args) {
System.out.println("Hello, World!");
System.out.println("Qabul qilingan argumentlar:");
for (String arg : args) { // args massividagi har bir elementni aylanib chiqish
System.out.println(arg);
}
}
}
```
Bu dasturni argumentlar bilan ishga tushirish:
```bash
javac HelloWorldArgs.java
java HelloWorldArgs C# Java Hellooo Args
```
Natija esa quyidagicha bo'ladi:
```
Hello, World!
Qabul qilingan argumentlar:
C#
Java
Hellooo
Args
```
Bu `for (String arg : args)` tsikli `args` massividagi har bir elementni (ya'ni, terminaldan kiritilgan har bir argumentni) alohida-alohida ekranga chiqarishi sababli sodir bo'ladi.
### Token Turlari
Java tilidagi kod tokenlarga bo'linadi. Asosiy token turlari:
* **Keyword (Kalit so'zlar):** Til tomonidan oldindan belgilangan maxsus ma'noga ega so'zlar (masalan, `public`, `class`, `static`, `void`).
* **Identifiers (Identifikatorlar):** Dasturchi tomonidan beriladigan nomlar (masalan, o'zgaruvchi nomlari, metod nomlari, sinf nomlari).
* **Literals (Literallar):** Dasturdagi aniq qiymatlar (masalan, `"Hello, World!"`, `10`, `3.14`, `true`).
* **Operators (Operatorlar):** Amallarni bajarish uchun ishlatiladigan belgilar (masalan, `+`, `-`, `=`, `*`, `/`).
* **Separators (Ajratuvchilar):** Kod elementlarini ajratish uchun ishlatiladigan belgilar (masalan, `,`, `;`, `(`, `)`, `{`, `}`).
---
### Keyingi Qadamlar va Hissa Qo'shish
Bu konspektlar doimiy ravishda yangilanib boradi. Agar sizda biron bir taklif, tuzatish yoki qo'shimcha ma'lumot bo'lsa, pull request yuborishingiz yoki issue ochishingiz mumkin.
```