C U P R I N S

 

Cuvânt înainte (Dan Grigoraş)

15

Prefaţă la ediţia a II-a

17

1. INTRODUCERE

19

1.1. Cuvinte-cheie

19

1.2. Istoricul şi caracteristicile limbajului Java

20

1.3. Instalare

21

1.4. Tipuri de aplicaţii Java

23

1.5. Maşina virtuală Java

29

1.6. Concluzii

31

1.7. Test-grilă

32

1.8. Exerciţii propuse spre implementare

32

2. FUNDAMENTELE LIMBAJULUI JAVA

33

2.1. Cuvinte-cheie

33

2.2. Fişiere-sursă

34

2.3. Atomi lexicali

35

2.3.1. Caractere Unicode

36

2.3.2. Traduceri lexicale

37

2.4. Tipuri de date

39

2.5. Expresii şi operatori

46

2.6. Variabile

64

2.7. Declaraţii şi iniţializări

69

2.8. Conversii

72

2.8.1. Contextele de conversie

76

2.9. Structuri de control

82

2.9.1. Instrucţiunea vidă

83

2.9.2. Instrucţiunea etichetă

83

2.9.3. Instrucţiunea expresie

84

2.9.4. Instrucţiunea if

84

2.9.5. Instrucţiunea switch

85

2.9.6. Instrucţiunea while

88

2.9.7. Instrucţiunea do

90

2.9.8. Instrucţiunea for

92

2.9.9. Instrucţiunea break

96

2.9.10. Instrucţiunea continue

97

2.9.11. Instrucţiunea return

98

2.9.12. Instrucţiunea throw

99

2.9.13. Instrucţiunea synchronized

101

2.9.14. Instrucţiunea try-catch-finally

102

2.10. Concluzii

107

2.11. Test-grilă

109

2.12. Exerciţii propuse spre implementare

115

2.13. Proiecte propuse spre implementare

116

3. CLASE, INTERFEŢE ŞI TABLOURI

119

3.1. Cuvinte-cheie

119

3.2. Clase

120

3.2.1. Domeniul de vizibilitate al numelui unei clase

121

3.2.2. Modificatorii unei clase

123

3.2.3. Clase derivate

126

3.2.4. Clasa Object

127

3.2.5. Implementarea interfeţelor

130

3.2.6. Declaraţiile membrilor unei clase

133

3.2.6.1. Niveluri de acces

135

3.2.6.2. Declaraţiile atributelor unei clase

140

3.2.6.3. Declaraţiile metodelor unei clase

151

3.2.7. Iniţializatori statici

163

3.2.8. Declaraţiile constructorilor

163

3.2.9. Clase interioare

169

3.2.10. Clase generice

173

3.2.11. Enumerări

176

3.2.12. Erori şi excepţii

180

3.2.13. Distrugerea obiectelor şi eliberarea memoriei

183

3.2.14. Divizarea unei aplicaţii în fişiere

187

3.3. Interfeţe

190

3.3.1. Declaraţiile atributelor unei interfeţe

191

3.3.2. Declaraţiile metodelor unei interfeţe

194

3.3.3. Moştenire multiplă prin intermediul interfeţelor

196

3.4. Tablouri

201

3.5. Conversii ale tipului referinţă

209

3.5.1. Conversii implicite ale tipului referinţă

209

3.5.2. Conversii explicite ale tipului referinţă

211

3.5.3. Conversiile implicite de la tipurile primitive la clasele wrapper

217

3.5.4. Conversiile implicite de la clasele wrapper la tipurile primitive

218

3.6. Concluzii

218

3.7. Test-grilă

219

3.8. Exerciţii propuse spre implementare

239

4. ŞIRURI ŞI STRUCTURI DINAMICE DE DATE

243

4.1. Cuvinte-cheie

243

4.2. Şiruri de caractere

244

4.2.1. Interfaţa CharSequence

244

4.2.2. Clasa String

245

4.2.3. Clasa StringBuffer

251

4.2.4. Clasa StringTokenizer

255

4.3. Structuri dinamice de date

257

4.3.1. Interfaţa Enumeration

257

4.3.2. Iteratori

258

4.3.3. Colecţii

259

4.3.4. Tabele de asocieri

260

4.3.5. Compararea obiectelor

264

4.3-5.1. Interfaţa Comparable

264

4.3.5.2. Interfaţa Comparator

265

4.3.6. Mulţimi

267

4.3.7. Liste

268

4.3.8. Clasa BitSet

273

4.3.9. Clasa Properties

275

4.4. Concluzii

280

4.5. Test-grilă

280

4.6. Exerciţii propuse spre implementare

281

5. FIŞIERE, FLUXURI DE DATE ŞI SERIALIZAREA OBIECTELOR

283

5.1. Cuvinte-cheie

283

5.2. Introducere

284

5.3. Clase Java pentru intrări şi ieşiri

286

5.3.1. Clasa File

287

5.3.2. Clasa RandomAccessFile

289

5.3.3. Clase Java pentru fluxuri de intrare/ieşire

292

5.3.3.1. Fluxuri de nivel scăzut

293

5-3.3.2. Fluxuri filtru de nivel înalt

296

5.3.3.3. Fluxuri pentru citire si fluxuri pentru scriere

299

5.3.3.4. Clasele PrintWriter şi Bufferedfieader

301

5.3.3.5. Clasa StreamTokenizer

307

5.3.3.6. Clasa System

313

5.4. Serializarea obiectelor

317

5.4.1. Clasa ObjectOutputStream

317

5.4.2. Clasa ObjectlnputStream

320

5.4.3. Interfaţa Serializable

322

5.4.4. Interfaţa Externalizable

323

5.4.5. Crearea unei clase serializabile

324

5.4.5.1. Derivarea unei clase serializabile

324

5.4.5.2. Implementarea interfeţei Serializable

325

5.4.5.3. Metode de serializare obişnuite

326

5.4.5.4. Implementarea interfeţei Externalizable

330

5.4.5.5. Declararea interfeţei si a tuturor metodelor de acces

331

5.5. Concluzii

336

5.6. Test-grilă

336

5.7. Exerciţii propuse spre implementare

340

5.8. Proiecte propuse spre implementare

341

6. FIRE DE EXECUŢIE

343

6.1. Cuvinte-cheie

343

6.2. Introducere

344

6.2.1. Breviar teoretic

344

6.2.2. Corectitudinea programelor

344

6.2.3. Primitivele de programare concurentă

345

6.3. Programare concurentă în Java

346

6.3.1. Crearea unui fir de execuţie prin extinderea clasei Thread

347

6.3.2. Crearea unui thread utilizând interfaţa Runnable

348

6.3.3. Controlul unui fir de execuţie

350

6.3.4. Prioritatea firelor de execuţie

355

6.3.5. Grupurile de fire de execuţie

359

6.3.6. Excluderea mutuală şi sincronizarea

361

6.3.7. Metodele wait() şi notify()

363

6.4. Studii de caz: problema filosofilor şi problema producător-consumator

372

6.4.1. Problema filosofilor

372

6.4.2. Problema producător-consumator

377

6.5. Concluzii

382

6.6. Test-grilă

382

6.7. Exerciţii propuse spre implementare

383

6.8. Proiecte propuse spre implementare

384

7. APPLETURI ŞI INSTRUMENTE DE LUCRU CU FERESTRELE (AWT)

385

7.1. Cuvinte-cheie

385

7.2. Appleturi

386

7.2.1. Clasa Applet (java.applet.Applet)

386

7.2.2. Obţinerea parametrilor de intrare ai appleturilor

389

7.2.3. Contextul unui applet

391

7.2.4. Comunicarea dintre appleturi

392

7.2.5. Redarea sunetelor şi imaginilor

394

7.2.5.1. Afişarea conţinutului grafic

394

7.2.5.2. Redarea sunetelor

396

7.2.6. Transformarea unui applet într-o aplicaţie de sine stătătoare

398

7.3. Grafica în Java

399

7.4. Componente şi evenimente

404

7.4.1. Bucla evenimentelor

404

7.4.2. Componente

408

7.4.3. Containere

410

7.4.4. Etichete

410

7.4.5. Butoane

412

7.4.6. Câmpuri şi arii text

414

7.4.6.1. Clasa java.awt.TextComponent

414

7.4.6.2. Clasa java.awt.TextField

415

7.4.6.3. Clasa java.awt.TextArea

416

7.4.7. Butoane de selecţie (checkbox şi radio)

421

7.4.8. Liste de opţiuni

423

7.4.9. Suprafeţe de desenare

428

7.4.10. Panouri (panels)

429

7.4.11. Meniuri pop-up

429

7.5. Gestionari de poziţionare (Layout Manageri)

432

7.5.1. Gestionarul BorderLayout

433

7.5.2. Gestionarul CardLayout

436

7.5.3. Gestionarul FlowLayout

438

7.5.4. Gestionarul GridLayout

439

7.5.5. Gestionarul GridBagLayout

440

7.5.6. Poziţionarea absolută

442

7.6. Ferestre

444

7.6.1. Clasa java.awt.Window

444

7.6.2. Clasa java.awt.Frame

445

7.6.3. Clasa java.awt.Dialog

447

7.6.4. Clasa j ava awt FileDialog

449

7.7. Managerul de securitate

451

7.8. Concluzii

453

7.9. Test-grilă

453

7.10. Exerciţii propuse spre implementare

455

7.11. Proiecte propuse spre implementare

457

8. ACCESUL LA BAZE DE DATE FOLOSIND JDBC

459

8.1. Cuvinte-cheie

459

8.2. Introducere

460

8.3. Clasificarea driverelor JDBC

462

8.4. Breviar SQL

463

8.4.1. Instrucţiunea CREATE TABLE

464

8.4.2. Instrucţiunea INSERT

464

8.4.3. Instrucţiunea UPDATE

465

8.4.4. Instrucţiunea DELETE

465

8.4.5. Instrucţiunea SELECT

466

8.5. Asocieri de tipuri între SQL şi Java

466

8.6. Accesarea unei baze de date folosind JDBC

469

8.6.1. Înregistrarea driverului JDBC folosind clasa DriverManager

469

8.6.2. Stabilirea unei conexiuni cu baza de date

470

8.6.3. Execuţia unei instrucţiuni SQL

471

8.6.4. Procesarea rezultatelor

474

8.6.5. Închiderea unei conexiuni la o bază de date

478

8.7. Instalarea şi configurarea MySQL

479

8.7.1. Introducere

479

8.7.2. Drivere JDBC pentru MySQL

480

8.8. Utilizarea punţii JDBC-ODBC

483

8.9. Tranzacţii

486

8.9.1. Motivaţii pentru folosirea tranzacţiilor

486

8.9.2. ACID

488

8.9.3. Niveluri de izolare

489

8.10. Concluzii

490

8.11. Test-grilă

490

8.12. Exerciţii propuse spre implementare

492

8.13. Proiecte propuse spre implementare

493

9. PROGRAMAREA REŢELELOR

495

9.1. Cuvinte-cheie

495

9.2. Introducere

496

9.2.1. Adrese, porturi şi socketuri

496

9.3. Programarea reţelelor prin intermediul conexiunilor

499

9.3.1. Clasa ServerSocket

499

9.3.2. Clasa Socket

500

9.3.3. O aplicaţie simplă client/server orientată conexiune

502

9.4. Programarea reţelelor prin intermediul datagramelor

507

9.4.1. Clasa DatagramPacket

507

9.4.2. Clasa DatagramSocket

509

9.4.3. O aplicaţie simplă client/server neorientată conexiune

511

9.4.4. Clasa InetAddress

514

9.4.5. Clasa URL

516

9.4.6. Obţinerea unei pagini Web prin intermediul unui socket

522

9.5. Apelul metodelor la distanţă

526

9.5.1. Obiectul de la distanţă

527

9.5.2. Registrul de nume

529

9.5.3. Exemplu de utilizare a apelurilor la distanţă

529

9.5.4. Localizarea fişierelor RMI. Pachete necesare

532

9.5.5. Clasa Naming

533

9.5.6. Clasa LocateRegistry

534

9.5.7. Interfaţa Registry

534

9.5.8. Clasa RemoteObject

535

9.5.9. Obiecte la distanţă ca parametri

535

9.5.10. Serializarea unui obiect la distanţă

537

9.5.11. Clasa RemoteServer

537

9.5.12. Clasa RemoteStub

538

9.5.13. Interfaţa Unreferenced

538

9.5.14. Clasa RMlSocketFactory

538

9.5.15. Interfaţa RMlFailureHandler

540

9.5.16. Exemplu de aplicaţie RMI

540

9.6. Concluzii

545

9.7. Test-grilă

545

9.8. Exerciţii propuse spre implementare

547

9.9. Proiecte propuse spre implementare

547

10. SERVLETURI

549

10.1. Cuvinte-cheie

549

10.2. CGI (Common Gateway Interface)

550

10.2.1. Variabilele de mediu

551

10.2.2. Apelarea programelor CGI din formularele HTML

553

10.2.3. Procesarea datelor din formularele HTML prin metoda GET

555

10.2.4. Procesarea unui formular prin metoda POST

556

10.3. Servleturi

558

10.3.1. Servlet API

559

10.3.2. Funcţionalitatea servleturilor

559

10.3.3. Execuţia servleturilor

560

10.3.4. Structura de bază a unui servlet

561

10.3.5. Ciclul de viaţă al unui servlet

562

10.3.6. Clasa HttpServlet

564

10.3.7. Redirectarea cererii

571

10.3.8. Returnarea unei erori

571

10.3.9. Exemplu de aplicaţie Web

572

10.4. Concluzii

583

10.5. Test-grilă

584

10.6. Exerciţii propuse spre implementare

585

10.7. Proiecte propuse spre implementare

585

11. JAVA SERVER PAGES (JSP)

587

11.1. Cuvinte-cheie

587

11.2. Introducere

588

11.3. Elemente JSP

589

11.3.1. Comentarii

590

11.3.2. Directive

591

11.3.2.1. Directiva page

592

11.3.2.2. Directiva include

593

11.3.2.3. Directiva taglib

594

11.3.3. Declaraţii

594

11.3.4. Iniţializarea şi terminarea unui JSP

595

11.3.5. Obiecte implicite

596

11.3.6. Expresii

597

11.3.7. Scriptlet-uri

597

11.3.8. Acţiuni

598

11.3.8.1. Integrarea componentelor JavaBean

598

11.4. Concluzii

600

11.5. Test-grilă

600

11.6. Exerciţii propuse spre implementare

601

11.7. Proiecte propuse spre implementare

601

12. PROCESAREA DOCUMENTELOR XML

603

12.1. Cuvinte-cheie

603

12.2. Standarde şi specificaţii

604

12.3. Instalare

605

12.4. SAX

605

12.4.1. Pachete necesare

605

12.4.2. Exemplu de document XML

605

12.4.3. Obţinerea informaţiilor din documentele XML

606

12.4.4. Obţinerea valorilor atributelor unui tag

610

12.4.5. Procesarea documentelor XML care conţin spaţii de nume

611

12.4.6. Procesarea documentelor XML care trebuie validate prin DTD

614

12.4.7. Procesarea documentelor XML care trebuie validate via XML Schema

617

12.5. DOM

619

12.5.1. Pachete necesare

620

12.5.2. Crearea arborelui asociat unui document XML

621

12.5.3. Manipularea arborelui DOM

621

12.5.3.1. Interfaţa Node

621

12.5.3.2. Procesarea documentelor XML care utilizează spaţii de nume

628

12.5.3.3. Procesarea documentelor XML care conţin DTD

631

12.5.3.4. Validarea documentelor XML prin XML Schema

634

12.5.3.5. Interfaţa Document

635

12.6. XSLT

638

12.6.1. Pachete necesare

638

12.6.2. Realizarea unor transformări

639

12.7. Concluzii

643

12.8. Test-grilă

644

12.9. Exerciţii propuse spre implementare

644

12.10. Proiecte propuse spre implementare

645

13. INTERACŢIUNEA CU UTILIZATORUL PRIN SWING

647

13.1. Cuvinte-cheie

647

13.2. Introducere

648

13.2.1. Obiectivele urmărite în acest capitol

648

13.2.2. Despre interfeţe grafice

649

13.2.3. JFC (Java Foundation Classes)

650

13.2.4. Componentele şi pachetele bibliotecii Swing

652

13.2.5. Principii de bază

659

13.2.5.1. MVC(Model-View-Controller)

659

13.2.5.2. UI Delegate

660

13.2.5.3. Look-and-feel

661

13.2.5.4. Mai multe despre modele

664

13.2.5.5. Swing versus AWT

667

13.3. Fundamentele Swing

668

13.3.1. Evenimente şi ascultători

668

13.3.2. Fire de execuţie în Swing

681

13.3.3. Desenarea componentelor grafice

684

13.3.4. Alinierea la JavaBeans

689

13.3.5. Gestiunea focusului"

691

13.3.6. Clasificarea componentelor Swing

695

13.4. Containere de bază

695

13.4.1. JFrame

696

13.4.2. Clase şi interfeţe legate de ferestre

701

13.4.3. JWindow

702

13.4.4. JDialog

705

13.4.5. JApplet

707

13.5. Containere intermediare

708

13.5.1. JPanel

708

13.5.2. JScrollPane

709

13.5.3. JSplitPane

713

13.5.4. JTabbedPane

715

13.6. Componente atomice simple

720

13.6.1. JLabel

720

13.6.2. Butoane

722

13.6.2.1. JButton

724

13.6.2.2. JToggleButton, JCheckButton, JRadioButton

724

13.6.3. Chenare

727

13.6.4. JList

730

13.6.5. JComboBox

734

13.6.6. JSpinner

738

13.7. Componente atomice complexe

739

13.7.1. Componente text

739

13.7.2. Jtable

748

13.7.3. Jtree

760

13.8. Meniuri şi bare de unelte

767

13.8.1. Meniuri

767

13.8.2. JtoolBar

769

13.9. Dialoguri

774

13.9.1. JOptionPane

775

13.9.2. JFileChooser

780

13.9.3. JColorChooser

785

13.10. Componente pentru progres şi derulare

789

13.10.1. JSlider

789

13.10.2. JScrollBar

791

13.10.3. JProgressBar

793

13.10.4. JToolTip

795

13.11. Ferestre interioare

796

13.11.1. JDesktopPane

797

13.11.2. JInternalFrame

797

13.12. Recomandări şi optimizări

802

13.13. Concluzii

803

13.14. Test-grilă

804

13.15. Exerciţii propuse spre implementare

809

13.16. Proiecte propuse spre implementare

810

14. SISTEMUL HELP PENTRU JAVA

811

14.1. Cuvinte-cheie

811

14.2. Convenţii

812

14.3. Principii de bază

812

14.3.1. Prezentarea pachetului JavaHelp

813

14.3.2. Alcătuirea ferestrei standard JavaHelp

814

14.3.3. Principii pe care sistemul JavaHelp le respectă

815

14.4. Dezvoltarea efectivă a help-ului

815

14.4.1. Temele HTML

816

14.4.2. Fişierul HelpSet

817

14.4.3. Fişierul Map

820

14.4.4. Fişierul cuprins

821

14.4.5. Fişierul index

823

14.4.6. Indexarea şi căutarea

824

14.4.7. Compresia şi încapsularea

827

14.5. Ataşarea help-ului aplicaţiilor

827

14.5.1. Clasa HelpSet

828

14.5.2. Clasa HelpBroker

829

14.5.3. Clasa CSH

831

14.5.4. Adăugarea help-ului ferestrelor

832

14.5.5. Adăugarea help-ului componentelor

833

14.5.6. Activarea help-ului prin apăsarea butoanelor

833

14.5.7. Help activat folosind mouse-ul

834

14.5.8. Scufundarea help-ului în aplicaţie

835

14.6. Concluzii

836

14.7. Test-grilă

836

14.8. Exerciţii propuse spre implementare

837

14.9. Proiecte propuse spre implementare

837

15. INTERNAŢIONALIZAREA APLICAŢIILOR

839

15.1. Cuvinte-cheie

839

15.2. Introducere

840

15.3. Codări

841

15.3.1. Despre Unicode

841

15.3.2. Seturi de caractere

842

15.4. Setarea localizării

845

15.5. Separarea datelor

848

15.6. Formatări

851

15.6.1. Formatarea numerelor

852

15.6.2. Reprezentarea monetară

852

15.6.3. Formatarea datei calendaristice şi a orei

853

15.6.4. Formatarea mesajelor

853

15.7. Lucrul cu fonturi

855

15.8. Introducerea textului

856

15.9. Paşii necesari pentru internaţionalizarea aplicaţiilor

857

15.10. Concluzii

858

15.11. Test-grilă

858

15.12. Exerciţii propuse spre implementare

860

15.13. Proiecte propuse spre implementare

860

Bibliografie

861