www.ksiegarnia-fachowa.pl
wprowadź własne kryteria wyszukiwania książek: (jak szukać?)
Twój koszyk:   0 zł   zamówienie wysyłkowe >>>
Strona główna > opis książki

JAVA PODSTAWY


HORSTMANN C.S.

wydawnictwo: HELION , rok wydania 2019, wydanie XI

cena netto: 99.90 Twoja cena  94,91 zł + 5% vat - dodaj do koszyka

Java

Podstawy

Świat usłyszał o Javie pod koniec 1995 roku. Wkrótce stała się niezwykle popularną i cenioną technologią. Dziś jest dojrzałym, rozbudowanym, elastycznym, a przy tym niezwykle starannie zaprojektowanym językiem programowania, który może służyć do pisania dużych systemów, małych programów, aplikacji mobilnych i aplikacji WWW. Charakteryzuje się też wysublimowanymi zabezpieczeniami, które w niego wbudowano. Każdy, kto chce pisać dobry i wydajny kod, powinien dobrze poznać zarówno podstawowe, jak i zaawansowane cechy Javy.

Ta książka jest kolejnym, zaktualizowanym i uzupełnionym wydaniem kultowego podręcznika dla profesjonalnych programistów Javy - to pierwszy tom, w którym omówiono podstawy języka oraz najważniejsze zagadnienia związane z programowaniem interfejsu użytkownika. W tym wydaniu opisano pakiet JDK Java Standard Edition (SE) w wersji 9, 10 i 11. Teorii towarzyszą liczne przykłady kodu, obrazujące zasady działania niemal każdej przedstawionej tu funkcji czy biblioteki. Przykładowe programy są proste, aby ułatwić naukę najważniejszych zagadnień.

W tej książce między innymi:

solidne wprowadzenie do Javy i przygotowanie środowiska pracy
zasady programowania obiektowego: klasy, hermetyzacja, dziedziczenie
mechanizm refleksji i obiekty proxy
interfejsy, klasy wewnętrzne i wyrażenia lambda
programowanie generyczne i system kolekcji
GUI i praca z pakietem Swing
programowanie współbieżne

Wstęp 13
Do Czytelnika 13
O książce 15
Konwencje typograficzne 17
Przykłady kodu 17
Podziękowania 19

Rozdział 1. Wprowadzenie do Javy 21

1.1. Java jako platforma programistyczna 21
1.2. Słowa klucze białej księgi Javy 22
1.2.1. Prostota 23
1.2.2. Obiektowość 23
1.2.3. Sieciowość 24
1.2.4. Niezawodność 24
1.2.5. Bezpieczeństwo 24
1.2.6. Niezależność od architektury 25
1.2.7. Przenośność 26
1.2.8. Interpretacja 26
1.2.9. Wysoka wydajność 27
1.2.10. Wielowątkowość 27
1.2.11. Dynamiczność 27
1.3. Aplety Javy i internet 28
1.4. Krótka historia Javy 29
1.5. Główne nieporozumienia dotyczące Javy 32

Rozdział 2. Środowisko programistyczne Javy 35

2.1. Instalacja oprogramowania Java Development Kit 35
2.1.1. Pobieranie pakietu JDK 36
2.1.2. Instalacja pakietu JDK 37
2.1.3. Instalacja plików źródłowych i dokumentacji 39
2.2. Używanie narzędzi wiersza poleceń 40
2.3. Praca w zintegrowanym środowisku programistycznym 45
2.4. JShell 48

Rozdział 3. Podstawowe elementy języka Java 51

3.1. Prosty program w Javie 52
3.2. Komentarze 55
3.3. Typy danych 56
3.3.1. Typy całkowite 56
3.3.2. Typy zmiennoprzecinkowe 57
3.3.3. Typ char 58
3.3.4. Unicode i typ char 60
3.3.5. Typ boolean 61
3.4. Zmienne i stałe 61
3.4.1. Deklarowanie zmiennych 61
3.4.2. Inicjalizacja zmiennych 62
3.4.3. Stałe 63
3.4.4. Typ wyliczeniowy 64
3.5. Operatory 65
3.5.1. Operatory arytmetyczne 65
3.5.2. Funkcje i stałe matematyczne 66
3.5.3. Konwersja typów numerycznych 68
3.5.4. Rzutowanie 68
3.5.5. Łączenie przypisania z innymi operatorami 69
3.5.6. Operatory inkrementacji i dekrementacji 70
3.5.7. Operatory relacyjne i logiczne 70
3.5.8. Operatory bitowe 71
3.5.9. Nawiasy i priorytety operatorów 72
3.6. Łańcuchy 73
3.6.1. Podłańcuchy 73
3.6.2. Konkatenacja 74
3.6.3. Łańcuchów nie można modyfikować 74
3.6.4. Porównywanie łańcuchów 76
3.6.5. Łańcuchy puste i łańcuchy null 77
3.6.6. Współrzędne kodowe znaków i jednostki kodowe 77
3.6.7. API String 78
3.6.8. Dokumentacja API w internecie 81
3.6.9. Składanie łańcuchów 84
3.7. Wejście i wyjście 85
3.7.1. Odbieranie danych wejściowych 85
3.7.2. Formatowanie danych wyjściowych 88
3.7.3. Zapis i odczyt plików 92
3.8. Sterowanie wykonywaniem programu 94
3.8.1. Zasięg blokowy 94
3.8.2. Instrukcje warunkowe 95
3.8.3. Pętle 98
3.8.4. Pętle o określonej liczbie powtórzeń 101
3.8.5. Wybór wielokierunkowy - instrukcja switch 105
3.8.6. Instrukcje przerywające przepływ sterowania 107
3.9. Wielkie liczby 110
3.10. Tablice 112
3.10.1. Deklarowanie tablic 112
3.10.2. Dostęp do elementów tablicy 114
3.10.3. Pętla typu for each 114
3.10.4. Kopiowanie tablicy 115
3.10.5. Parametry wiersza poleceń 116
3.10.6. Sortowanie tablicy 117
3.10.7. Tablice wielowymiarowe 120
3.10.8. Tablice postrzępione 122

Rozdział 4. Obiekty i klasy 127

4.1. Wstęp do programowania obiektowego 128
4.1.1. Klasy 129
4.1.2. Obiekty 129
4.1.3. Identyfikacja klas 130
4.1.4. Relacje między klasami 131
4.2. Używanie klas predefiniowanych 132
4.2.1. Obiekty i zmienne obiektów 133
4.2.2. Klasa LocalDate 135
4.2.3. Metody udostępniające i zmieniające wartość elementu 137
4.3. Definiowanie własnych klas 141
4.3.1. Klasa Employee 141
4.3.2. Używanie wielu plików źródłowych 144
4.3.3. Analiza klasy Employee 144
4.3.4. Pierwsze kroki w tworzeniu konstruktorów 145
4.3.5. Deklarowanie zmiennych lokalnych za pomocą słowa kluczowego var 146
4.3.6. Praca z referencjami null 147
4.3.7. Parametry jawne i niejawne 148
4.3.8. Korzyści z hermetyzacji 149
4.3.9. Przywileje klasowe 151
4.3.10. Metody prywatne 152
4.3.11. Stałe jako pola klasy 152
4.4. Pola i metody statyczne 153
4.4.1. Pola statyczne 153
4.4.2. Stałe statyczne 154
4.4.3. Metody statyczne 155
4.4.4. Metody fabryczne 156
4.4.5. Metoda main 156
4.5. Parametry metod 159
4.6. Konstruowanie obiektów 165
4.6.1. Przeciążanie 165
4.6.2. Domyślna inicjalizacja pól 166
4.6.3. Konstruktor bezargumentowy 166
4.6.4. Jawna inicjalizacja pól 167
4.6.5. Nazywanie parametrów 168
4.6.6. Wywoływanie innego konstruktora 169
4.6.7. Bloki inicjalizujące 169
4.6.8. Niszczenie obiektów i metoda finalize 173
4.7. Pakiety 174
4.7.1. Nazwy pakietów 174
4.7.2. Importowanie klas 175
4.7.3. Importowanie statyczne 176
4.7.4. Dodawanie klasy do pakietu 177
4.7.5. Dostęp do pakietu 180
4.7.6. Ścieżka klas 181
4.7.7. Ustawianie ścieżki klas 183
4.8. Pliki JAR 184
4.8.1. Tworzenie plików JAR 184
4.8.2. Manifest 184
4.8.3. Wykonywalne pliki JAR 186
4.8.4. Pliki JAR z wieloma wersjami klas 187
4.8.5. Kilka uwag na temat opcji wiersza poleceń 188
4.9. Komentarze dokumentacyjne 189
4.9.1. Wstawianie komentarzy 190
4.9.2. Komentarze do klas 190
4.9.3. Komentarze do metod 191
4.9.4. Komentarze do pól 192
4.9.5. Komentarze ogólne 192
4.9.6. Komentarze do pakietów 193
4.9.7. Pobieranie komentarzy 194
4.10. Porady dotyczące projektowania klas 195

Rozdział 5. Dziedziczenie 199

5.1. Klasy, nadklasy i podklasy 200
5.1.1. Definiowanie podklas 200
5.1.2. Przesłanianie metod 201
5.1.3. Konstruktory podklas 203
5.1.4. Hierarchia dziedziczenia 207
5.1.5. Polimorfizm 207
5.1.6. Zasady wywoływania metod 209
5.1.7. Wyłączanie dziedziczenia - klasy i metody finalne 211
5.1.8. Rzutowanie 212
5.1.9. Klasy abstrakcyjne 215
5.1.10. Ograniczanie dostępu 220
5.2. Kosmiczna klasa wszystkich klas - Object 221
5.2.1. Zmienne typu Object 221
5.2.2. Metoda equals 221
5.2.3. Porównywanie a dziedziczenie 223
5.2.4. Metoda hashCode 226
5.2.5. Metoda toString 228
5.3. Generyczne listy tablicowe 234
5.3.1. Deklarowanie list tablicowych 234
5.3.2. Dostęp do elementów listy tablicowej 237
5.3.3. Zgodność pomiędzy typowanymi a surowymi listami tablicowymi 240
5.4. Opakowania obiektów i automatyczne pakowanie 241
5.5. Metody ze zmienną liczbą parametrów 244
5.6. Klasy wyliczeniowe 246
5.7. Refleksja 248
5.7.1. Klasa Class 248
5.7.2. Podstawy deklarowania wyjątków 251
5.7.3. Zasoby 252
5.7.4. Zastosowanie refleksji w analizie funkcjonalności klasy 254
5.7.5. Refleksja w analizie obiektów w czasie działania programu 259
5.7.6. Zastosowanie refleksji w generycznym kodzie tablicowym 264
5.7.7. Wywoływanie dowolnych metod i konstruktorów 267
5.8. Porady projektowe dotyczące dziedziczenia 270

Rozdział 6. Interfejsy, wyrażenia lambda i klasy wewnętrzne 273

6.1. Interfejsy 274
6.1.1. Koncepcja interfejsu 274
6.1.2. Własności interfejsów 280
6.1.3. Interfejsy a klasy abstrakcyjne 281
6.1.4. Metody statyczne i prywatne 282
6.1.5. Metody domyślne 283
6.1.6. Wybieranie między metodami domyślnymi 284
6.1.7. Interfejsy i wywołania zwrotne 286
6.1.8. Interfejs Comparator 289
6.1.9. Klonowanie obiektów 290
6.2. Wyrażenia lambda 296
6.2.1. Po co w ogóle są lambdy 296
6.2.2. Składnia wyrażeń lambda 297
6.2.3. Interfejsy funkcyjne 299
6.2.4. Referencje do metod 301
6.2.5. Referencje do konstruktorów 305
6.2.6. Zakres dostępności zmiennych 306
6.2.7. Przetwarzanie wyrażeń lambda 308
6.2.8. Poszerzenie wiadomości o komparatorach 311
6.3. Klasy wewnętrzne 312
6.3.1. Dostęp do stanu obiektu w klasie wewnętrznej 313
6.3.2. Specjalne reguły składniowe dotyczące klas wewnętrznych 316
6.3.3. Czy klasy wewnętrzne są potrzebne i bezpieczne? 317
6.3.4. Lokalne klasy wewnętrzne 319
6.3.5. Dostęp do zmiennych finalnych z metod zewnętrznych 320
6.3.6. Anonimowe klasy wewnętrzne 321
6.3.7. Statyczne klasy wewnętrzne 325
6.4. Moduły ładowania usług 328
6.5. Klasy pośredniczące 331
6.5.1. Kiedy używać klas pośredniczących 331
6.5.2. Tworzenie obiektów pośredniczących 331
6.5.3. Właściwości klas pośredniczących 335

Rozdział 7. Wyjątki, asercje i dzienniki 337

7.1. Obsługa błędów 338
7.1.1. Klasyfikacja wyjątków 339
7.1.2. Deklarowanie wyjątków kontrolowanych 341
7.1.3. Zgłaszanie wyjątków 343
7.1.4. Tworzenie klas wyjątków 344
7.2. Przechwytywanie wyjątków 345
7.2.1. Przechwytywanie wyjątku 345
7.2.2. Przechwytywanie wielu typów wyjątków 347
7.2.3. Powtórne generowanie wyjątków i budowanie łańcuchów wyjątków 348
7.2.4. Klauzula finally 350
7.2.5. Instrukcja try z zasobami 352
7.2.6. Analiza danych ze stosu wywołań 354
7.3. Wskazówki dotyczące stosowania wyjątków 358
7.4. Asercje 360
7.4.1. Koncepcja asercji 361
7.4.2. Włączanie i wyłączanie asercji 362
7.4.3. Zastosowanie asercji do sprawdzania parametrów 362
7.4.4. Zastosowanie asercji do dokumentowania założeń 364
7.5. Dzienniki 365
7.5.1. Podstawy zapisu do dziennika 366
7.5.2. Zaawansowane techniki zapisu do dziennika 366
7.5.3. Zmiana konfiguracji menedżera dzienników 368
7.5.4. Lokalizacja 370
7.5.5. Obiekty typu Handler 371
7.5.6. Filtry 374
7.5.7. Formatery 374
7.5.8. Przepis na dziennik 375
7.6. Wskazówki dotyczące debugowania 383

Rozdział 8. Programowanie generyczne 389

8.1. Dlaczego programowanie generyczne 390
8.1.1. Zalety parametrów typów 390
8.1.2. Dla kogo programowanie generyczne 391
8.2. Definicja prostej klasy generycznej 392
8.3. Metody generyczne 394
8.4. Ograniczenia zmiennych typowych 396
8.5. Kod generyczny a maszyna wirtualna 398
8.5.1. Wymazywanie typów 398
8.5.2. Translacja wyrażeń generycznych 399
8.5.3. Translacja metod generycznych 400
8.5.4. Używanie starego kodu 402
8.6. Ograniczenia i braki 403
8.6.1. Nie można podawać typów prostych jako parametrów typowych 403
8.6.2. Sprawdzanie typów w czasie działania programu jest możliwe tylko dla typów surowych 403
8.6.3. Nie można tworzyć tablic typów generycznych 404
8.6.4. Ostrzeżenia dotyczące zmiennej liczby argumentów 405
8.6.5. Nie wolno tworzyć egzemplarzy zmiennych typowych 406
8.6.6. Nie można utworzyć egzemplarza generycznej tablicy 407
8.6.7. Zmiennych typowych nie można używać w statycznych kontekstach klas generycznych 408
8.6.8. Obiektów klasy generycznej nie można generować ani przechwytywać 409
8.6.9. Można wyłączyć sprawdzanie wyjątków kontrolowanych 409
8.6.10. Uważaj na konflikty, które mogą powstać po wymazaniu typów 411
8.7. Zasady dziedziczenia dla typów generycznych 412
8.8. Typy wieloznaczne 414
8.8.1. Koncepcja typu wieloznacznego 414
8.8.2. Ograniczenia nadtypów typów wieloznacznych 415
8.8.3. Typy wieloznaczne bez ograniczeń 418
8.8.4. Chwytanie typu wieloznacznego 418
8.9. Refleksja a typy generyczne 421
8.9.1. Generyczna klasa Class 421
8.9.2. Zastosowanie parametrów Classdo dopasowywania typów 422
8.9.3. Informacje o typach generycznych w maszynie wirtualnej 422
8.9.4. Literały typowe 426

Rozdział 9. Kolekcje 433

9.1. Architektura kolekcji Javy 434
9.1.1. Oddzielenie warstwy interfejsów od warstwy klas konkretnych 434
9.1.2. Interfejs Collection 436
9.1.3. Iteratory 437
9.1.4. Generyczne metody użytkowe 439
9.2. Interfejsy w systemie kolekcji Javy 442
9.3. Konkretne klasy kolekcyjne 445
9.3.1. Listy powiązane 445
9.3.2. Listy tablicowe 454
9.3.3. Zbiór HashSet 454
9.3.4. Zbiór TreeSet 458
9.3.5. Kolejki Queue i Deque 462
9.3.6. Kolejki priorytetowe 464
9.4. Słowniki 465
9.4.1. Podstawowe operacje słownikowe 465
9.4.2. Modyfikowanie wpisów w słowniku 468
9.4.3. Widoki słowników 470
9.4.4. Klasa WeakHashMap 471
9.4.5. Klasy LinkedHashSet i LinkedHashMap 472
9.4.6. Klasy EnumSet i EnumMap 473
9.4.7. Klasa IdentityHashMap 474
9.5. Widoki i opakowania 476
9.5.1. Małe kolekcje 476
9.5.2. Przedziały 478
9.5.3. Widoki niemodyfikowalne 478
9.5.4. Widoki synchronizowane 480
9.5.5. Widoki kontrolowane 480
9.5.6. Uwagi dotyczące operacji opcjonalnych 481
9.6. Algorytmy 485
9.6.1. Dlaczego algorytmy generyczne 485
9.6.2. Sortowanie i tasowanie 486
9.6.3. Wyszukiwanie binarne 489
9.6.4. Proste algorytmy 490
9.6.5. Operacje zbiorowe 492
9.6.6. Konwersja pomiędzy kolekcjami a tablicami 493
9.6.7. Pisanie własnych algorytmów 493
9.7. Stare kolekcje 495
9.7.1. Klasa Hashtable 495
9.7.2. Wyliczenia 495
9.7.3. Słowniki własności 496
9.7.4. Stosy 500
9.7.5. Zbiory bitów 500

Rozdział 10. Graficzne interfejsy użytkownika 505

10.1. Historia zestawów narzędzi do tworzenia interfejsów użytkownika 505
10.2. Wyświetlanie ramki 507
10.2.1. Tworzenie ramki 507
10.2.2. Właściwości ramki 509
10.3. Wyświetlanie informacji w komponencie 512
10.3.1. Figury 2D 517
10.3.2. Kolory 523
10.3.3. Czcionki 524
10.3.4. Wyświetlanie obrazów 530
10.4. Obsługa zdarzeń 531
10.4.1. Podstawowe koncepcje obsługi zdarzeń 531
10.4.2. Przykład - obsługa kliknięcia przycisku 533
10.4.3. Zwięzłe definiowanie procedur nasłuchowych 536
10.4.4. Klasy adaptacyjne 537
10.4.5. Akcje 539
10.4.6. Zdarzenia generowane przez mysz 545
10.4.7. Hierarchia zdarzeń w bibliotece AWT 550
10.5. API Preferences 552

Rozdział 11. Komponenty Swing interfejsu użytkownika 559

11.1. Swing i wzorzec model-widok-kontroler 560
11.2. Wprowadzenie do zarządzania rozkładem 563
11.2.1. Zarządcy układu 563
11.2.2. Rozkład brzegowy 565
11.2.3. Rozkład siatkowy 567
11.3. Wprowadzanie tekstu 568
11.3.1. Pola tekstowe 568
11.3.2. Etykiety komponentów 570
11.3.3. Pola haseł 571
11.3.4. Obszary tekstowe 572
11.3.5. Panele przewijane 573
11.4. Komponenty umożliwiające wybór opcji 575
11.4.1. Pola wyboru 575
11.4.2. Przełączniki 577
11.4.3. Obramowanie 581
11.4.4. Listy rozwijane 583
11.4.5. Suwaki 586
11.5. Menu 592
11.5.1. Tworzenie menu 592
11.5.2. Ikony w elementach menu 595
11.5.3. Pola wyboru i przełączniki jako elementy menu 596
11.5.4. Menu podręczne 597
11.5.5. Mnemoniki i akceleratory 598
11.5.6. Aktywowanie i dezaktywowanie elementów menu 600
11.5.7. Paski narzędzi 604
11.5.8. Dymki 606
11.6. Zaawansowane techniki zarządzania rozkładem 607
11.6.1. Rozkład GridBagLayout 607
11.6.2. Niestandardowi zarządcy rozkładu 616
11.7. Okna dialogowe 620
11.7.1. Okna dialogowe opcji 621
11.7.2. Tworzenie okien dialogowych 625
11.7.3. Wymiana danych 629
11.7.4. Okna dialogowe wyboru plików 634

Rozdział 12. Współbieżność 643

12.1. Czym są wątki 644
12.2. Stany wątków 648
12.2.1. Wątki tworzone za pomocą operatora new 649
12.2.2. Wątki RUNNABLE 649
12.2.3. Wątki BLOCKED i WAITING 650
12.2.4. Zamykanie wątków 650
12.3. Własności wątków 652
12.3.1. Przerywanie wątków 652
12.3.2. Wątki demony 655
12.3.3. Nazwy wątków 655
12.3.4. Procedury obsługi nieprzechwyconych wyjątków 655
12.3.5. Priorytety wątków 657
12.4. Synchronizacja 658
12.4.1. Przykład sytuacji powodującej wyścig 658
12.4.2. Wyścigi 660
12.4.3. Obiekty klasy Lock 662
12.4.4. Warunki 665
12.4.5. Słowo kluczowe synchronized 670
12.4.6. Bloki synchronizowane 674
12.4.7. Monitor 675
12.4.8. Pola ulotne 676
12.4.9. Zmienne finalne 677
12.4.10. Zmienne atomowe 677
12.4.11. Zakleszczenia 679
12.4.12. Zmienne lokalne wątków 682
12.4.13. Dlaczego metody stop i suspend są wycofywane 683
12.5. Kolekcje bezpieczne wątkowo 685
12.5.1. Kolejki blokujące 685
12.5.2. Szybkie słowniki, zbiory i kolejki 692
12.5.3. Atomowe modyfikowanie elementów słowników 693
12.5.4. Operacje masowe na współbieżnych słownikach skrótów 696
12.5.5. Współbieżne widoki zbiorów 698
12.5.6. Tablice kopiowane przy zapisie 699
12.5.7. Równoległe algorytmy tablicowe 699
12.5.8. Starsze kolekcje bezpieczne wątkowo 700
12.6. Zadania i pule wątków 701
12.6.1. Interfejsy Callable i Future 702
12.6.2. Klasa Executors 704
12.6.3. Kontrolowanie grup zadań 707
12.6.4. Metoda rozgałęzienie-złączenie 711
12.7. Obliczenia asynchroniczne 714
12.7.1. Klasa CompletableFuture 714
12.7.2. Tworzenie obiektów CompletableFuture 716
12.7.3. Czasochłonne zadania w wywołaniach zwrotnych interfejsu użytkownika 722
12.8. Procesy 728
12.8.1. Budowanie procesu 729
12.8.2. Uruchamianie procesu 730
12.8.3. Uchwyty procesów 731
Dodatek A 737

Skorowidz 741

768 stron, Format: 17.0x24.0cm. oprawa twarda

Księgarnia nie działa. Nie odpowiadamy na pytania i nie realizujemy zamówien. Do odwolania !.

 
Wszelkie prawa zastrzeżone PROPRESS sp. z o.o. 2012-2026