Java 官方編程手冊, 12/e (Java 17)

[美] 赫伯特·希爾特(Herbert Schildt) 著 石磊 衛琳 譯

  • Java 官方編程手冊, 12/e (Java 17)-preview-1
  • Java 官方編程手冊, 12/e (Java 17)-preview-2
  • Java 官方編程手冊, 12/e (Java 17)-preview-3
Java 官方編程手冊, 12/e (Java 17)-preview-1

買這商品的人也買了...

商品描述

《Java官方編程手冊(第12版·Java 17)》針對Java SE 17全面更新內容,講解瞭如何開發、編譯、調試和運行Java程序。暢銷書作者Herbert Schildt在本書中對整個Java語言進行了講解,包括其語法、關鍵字和基礎編程概念。書中還介紹了Java API庫的關鍵部分,如I/O、集合框架、流庫和並發實用工具,還討論了Swing、Java Bean和servlet,並提供了大量示例來演示Java的實際應用。當然,本書也詳細描述了Java語言的新增特性,如記錄、密封類和switch表達式。Herbert Schildt採用他一貫的清晰、利落、務求準確的風格撰寫本書,正是這種風格讓他撰寫的圖書成為全世界數百萬人的選擇。 本書內容 數據類型、變量、數組和運算符 控制語句 類、對象和方法 方法重載和重寫 繼承 接口和包 異常處理 多線程編程 枚舉、自動裝箱和註解 I/O類 泛型 lambda表達式 模塊 記錄 密封類 文本塊 switch表達式 instanceof的模式匹配 字符串處理 集合框架 網絡 事件處理 AWT Swing 並發API 流API 正則表達式 Java Bean servlet 其他內容

目錄大綱

第 I 部分  Java語言

第 1 章  Java的歷史和演變 3

1.1  Java的家世 3

1.1.1  現代編程語言的誕生:

C語言 3

1.1.2  C++:下一個階段 5

1.1.3  Java出現的時機已經成熟 5

1.2  Java的誕生 6

1.3  Java改變Internet的方式 7

1.3.1  Java applet 7

1.3.2  安全性 8

1.3.3  可移植性 8

1.4  Java的魔力:字節碼 8

1.5  超越applet 9

1.6  更快的發布周期 10

1.7  servlet:服務器端的Java 11

1.8  Java的關鍵特性 11

1.8.1  簡單性 11

1.8.2  面向對象 12

1.8.3  健壯性 12

1.8.4  多線程 12

1.8.5  體系結構中立 12

1.8.6  解釋執行和高性能 13

1.8.7  分佈式 13

1.8.8  動態性 13

1.9  Java的演變歷程 13

1.10  文化革新 17

第2 章  Java綜述 18

2.1  面向對象編程 18

2.1.1  兩種範式 18

2.1.2  抽象 19

2.1.3  OOP三原則 19

2.2  第一個簡單程序 23

2.2.1  輸入程序 23

2.2.2  編譯程序 24

2.2.3  深入分析第一個示例程序 24

2.3  第二個簡單程序 26

2.4  兩種控制語句 28

2.4.1  if語句 28

2.4.2  for循環 29

2.5  使用代碼塊 30

2.6  詞匯問題 32

2.6.1  空白符 32

2.6.2  標識符 32

2.6.3  字面值 32

2.6.4  註釋 33

2.6.5  分隔符 33

2.6.6  Java關鍵字 33

2.7  Java類庫 34

第3 章  數據類型、變量和數組 35

3.1  Java是強類型化的語言 35

3.2  基本類型 35

3.3  整型 36

3.3.1  byte 36

3.3.2  short 36

3.3.3  int 37

3.3.4  long 37

3.4  浮點型 38

3.4.1  float 38

3.4.2  double 38

3.5  字符型 39

3.6  布爾型 40

3.7  深入分析字面值 41

3.7.1  整型字面值 41

3.7.2  浮點型字面值 42

3.7.3  布爾型字面值 42

3.7.4  字符型字面值 43

3.7.5  字符串字面值 43

3.8  變量 44

3.8.1  變量的聲明 44

3.8.2  動態初始化 44

3.8.3  變量的作用域和生存期 45

3.9  類型轉換和強制類型轉換 47

3.9.1  Java的自動類型轉換 47

3.9.2  強制轉換不兼容的類型 47

3.10  表達式中的自動類型提升 49

3.11  數組 50

3.11.1  一維數組 50

3.11.2  多維數組 52

3.11.3  另一種數組聲明語法 56

3.12  局部變量的類型推斷 57

3.13  關於字符串的一些說明 59

第4章  運算符 60

4.1  算術運算符 60

4.1.1  基本算術運算符 61

4.1.2  求模運算符 62

4.1.3  算術與賦值復合運算符 62

4.1.4  自增與自減運算符 63

4.2  位運算符 64

4.2.1  位邏輯運算符 66

4.2.2  左移 68

4.2.3  右移 69

4.2.4  無符號右移 70

4.2.5  位運算符與賦值的組合 71

4.3  關系運算符 72

4.4  布爾邏輯運算符 73

4.5  賦值運算符 75

4.6  “?”運算符 75

4.7  運算符的優先級 76

4.8  使用圓括號 77

第 5 章  控制語句 78

5.1  Java的選擇語句 78

5.1.1  if語句 78

5.1.2  switch語句 81

5.2  迭代語句 86

5.2.1  while語句 86

5.2.2  do-while語句 87

5.2.3  for語句 90

5.2.4  for循環的for-each版本 93

5.2.5  for循環中的局部變量

類型推斷 98

5.2.6  嵌套的循環 99

5.3  跳轉語句 99

5.3.1  使用break語句 99

5.3.2  使用continue語句 103

5.3.3  使用return語句 104

第 6 章  類 106

6.1  類的基礎知識 106

6.1.1  類的一般形式 106

6.1.2  一個簡單的類 107

6.2  聲明對象 109

6.3  為對象引用變量賦值 111

6.4  方法 112

6.4.1  為Box類添加方法 112

6.4.2  返回值 114

6.4.3  添加帶參數的方法 115

6.5  構造函數 117

 

6.6  this關鍵字 120

6.7  垃圾回收 121

6.8  堆棧類 121

第 7 章  方法和類的深入分析 124

7.1  重載方法 124

7.2  將對象用作形參 129

7.3  實參傳遞的深入分析 131

7.4  返回對象 133

7.5  遞歸 134

7.6  訪問控制 136

7.7  理解static 139

7.8  final介紹 141

7.9  重新審視數組 141

7.10  嵌套類和內部類 143

7.11  String類 145

7.12  使用命令行參數 148

7.13  varargs:可變長度實參 148

7.13.1  重載varargs方法 151

7.13.2  varargs方法與模糊性 152

第 8 章  繼承 156

8.1  繼承的基礎知識 156

8.1.1  成員訪問與繼承 158

8.1.2  一個更實際的例子 159

8.1.3  超類變量可以引用子類

對象 161

8.2  使用super關鍵字 161

8.2.1  使用super調用超類的

構造函數 162

8.2.2  super的另一種用法 165

8.3  創建多級繼承層次 166

8.4  構造函數的執行時機 169

8.5  方法重寫 170

8.6  動態方法調度 172

8.6.1  重寫方法的原因 174

8.6.2  應用方法重寫 174

8.7  使用抽象類 176

8.8  在繼承中使用final關鍵字 178

8.8.1  使用final關鍵字阻止

重寫 178

8.8.2  使用final關鍵字阻止

繼承 179

8.9  局部變量類型推斷和繼承 179

8.10  Object類 181

第9章  包和接口 182

9.1  包 182

9.1.1  定義包 182

9.1.2  包查找與CLASSPATH 183

9.1.3  一個簡短的包示例 184

9.2  包和成員訪問 185

9.3  導入包 188

9.4  接口 190

9.4.1  定義接口 191

9.4.2  實現接口 192

9.4.3  嵌套接口 194

9.4.4  應用接口 195

9.4.5  接口中的變量 198

9.4.6  接口可以擴展 200

9.5  默認接口方法 201

9.5.1  默認方法的基礎知識 201

9.5.2  一個更實用的例子 203

9.5.3  多級繼承的問題 203

9.6  在接口中使用靜態方法 204

9.7  私有接口方法 205

9.8  關於包和接口的最後說明 206

第 10 章  異常處理 207

10.1  異常處理的基礎知識 207

10.2  異常類型 208

10.3  未捕獲的異常 209

10.4  使用try和catch 210

10.5  多條catch子句 211

10.6  嵌套的try語句 213

10.7  throw 215

10.8  throws 216

10.9  finally 217

10.10  Java的內置異常 219

10.11  創建自己的異常子類 220

10.12  鏈式異常 222

10.13  其他三個異常特性 224

10.14  使用異常 225

第11章  多線程編程 226

11.1  Java線程模型 227

11.1.1  線程優先級 228

11.1.2  同步 228

11.1.3  消息傳遞 228

11.1.4  Thread類和Runnable

接口 229

11.2  主線程 229

11.3  創建線程 231

11.3.1  實現Runnable接口 231

11.3.2  擴展Thread類 233

11.3.3  選擇一種創建方式 234

11.4  創建多個線程 234

11.5  使用isAlive()和join()方法 236

11.6  線程優先級 238

11.7  同步 239

11.7.1  使用同步方法 239

11.7.2  synchronized語句 241

11.8  線程間通信 243

11.9  掛起、恢復與停止線程 249

11.10  獲取線程的狀態 252

11.11  使用工廠方法創建和啟動

線程 253

11.12  使用多線程 254

第 12 章  枚舉、自動裝箱與註解 255

12.1  枚舉 255

12.1.1  枚舉的基礎知識 255

12.1.2  values()和valueOf()

方法 257

12.1.3  Java枚舉是類類型 259

12.1.4  枚舉繼承自Enum類 260

12.1.5  另一個枚舉示例 262

12.2  類型封裝器 264

12.2.1  Character封裝器 264

12.2.2  Boolean封裝器 264

12.2.3  數值類型封裝器 265

12.3  自動裝箱 266

12.3.1  自動裝箱與方法 267

12.3.2  表達式中發生的自動

裝箱/拆箱 268

12.3.3  布爾型和字符型數值的

自動裝箱/拆箱 269

12.3.4  自動裝箱/拆箱有助於

防止錯誤 270

12.3.5  一些警告 271

12.4  註解 271

12.4.1  註解的基礎知識 271

12.4.2  指定保留策略 272

12.4.3  在運行時使用反射獲取

註解 273

12.4.4  AnnotatedElement接口 278

12.4.5  使用默認值 278

12.4.6  標記註解 279

12.4.7  單成員註解 280

12.4.8  內置註解 282

12.5  類型註解 284

12.6  重復註解 288

12.7  一些限制 289

第 13 章  I/O、帶資源的try語句

以及其他主題 290

13.1  I/O的基礎知識 290

13.1.1  流 290

13.1.2  字節流和字符流 291

13.1.3  預定義流 293

13.2  讀取控制台輸入 293

13.2.1  讀取字符 294

13.2.2  讀取字符串 295

13.3  向控制台寫輸出 297

13.4  PrintWriter類 297

13.5  讀/寫文件 298

13.6  自動關閉文件 304

13.7  transient和volatile修飾符 307

13.8  使用instanceof運算符 308

13.9  strictfp 310

13.10  本地方法 311

13.11  使用assert 311

13.12  靜態導入 314

13.13  通過this()調用重載的構造

函數 316

13.14  基於值的類 318

第14章  泛型 319

14.1  什麽是泛型 319

14.2  一個簡單的泛型示例 320

14.2.1  泛型只使用引用類型 323

14.2.2  基於不同類型參數的

泛型類型是不同的 324

14.2.3  泛型提升類型安全性的

原理 324

14.3  帶兩個類型參數的泛型類 326

14.4  泛型類的一般形式 327

14.5  有界類型 328

14.6  使用通配符參數 330

14.7  創建泛型方法 337

14.8  泛型接口 340

14.9  原始類型與遺留代碼 342

14.10  泛型類層次 344

14.10.1  使用泛型超類 345

14.10.2  泛型子類 346

14.10.3  泛型層次中的運行時

類型比較 348

14.10.4  強制轉換 350

14.10.5  重寫泛型類的方法 350

14.11  泛型的類型推斷 351

14.12  局部變量類型推斷和泛型 352

14.13  擦除 353

14.14  模糊性錯誤 355

14.15  使用泛型的一些限制 356

14.15.1  不能實例化類型參數 356

14.15.2  對靜態成員的一些

限制 356

 

14.15.3  對泛型數組的一些

限制 357

14.15.4  對泛型異常的限制 358

第15 章  lambda表達式 359

15.1  lambda表達式簡介 359

15.1.1  lambda表達式的基礎

知識 360

15.1.2  函數式接口 360

15.1.3  幾個lambda表達式

示例 361

15.2  塊lambda表達式 365

15.3  泛型函數式接口 366

15.4  作為參數傳遞的lambda

表達式 368

15.5  lambda表達式與異常 370

15.6  lambda表達式和變量捕獲 372

15.7  方法引用 373

15.7.1  靜態方法的方法引用 373

15.7.2  實例方法的方法引用 374

15.7.3  泛型中的方法引用 378

15.8  構造函數引用 380

15.9  預定義的函數式接口 385

第 16 章  模塊 387

16.1  模塊基礎知識 387

16.1.1  簡單的模塊示例 388

16.1.2  編譯並運行第一個模塊

示例 392

16.1.3  詳述requires和exports 393

16.2  java.base和平臺模塊 393

16.3  舊代碼和未命名的模塊 394

16.4  導出到特定的模塊 395

16.5  使用requires transitive 396

16.6  使用服務 400

16.6.1  服務和服務提供程序的

基礎知識 400

16.6.2  基於服務的關鍵字 401

16.6.3  基於模塊的服務示例 401

16.7  模塊圖 407

16.8  三個特殊的模塊特性 408

16.8.1  開放模塊 408

16.8.2  opens語句 408

16.8.3  requires static 408

16.9  jlink工具和模塊JAR文件

介紹 409

16.9.1  鏈接exploded directory中

的文件 409

16.9.2  鏈接模塊化的JAR

文件 409

16.9.3  JMOD文件 410

16.10  層與自動模塊簡述 410

16.11  小結 411

第 17 章  switch表達式、記錄以及其他

新近添加的特性 412

17.1  switch的增強 412

17.1.1  使用case常量列表 414

17.1.2  switch表達式和yield

語句簡介 415

17.1.3  case語句中的箭頭 416

17.1.4  深入介紹箭頭case 418

17.1.5  另外一個switch表達式

示例 420

17.2  文本塊 421

17.2.1  文本塊的基礎知識 421

17.2.2  理解前導空格 422

17.2.3  在文本塊中使用雙引號 424

17.2.4  文本塊中的轉義序列 424

17.3  記錄 425

17.3.1  記錄的基礎知識 425

17.3.2  創建記錄構造函數 427

17.3.3  另外一個記錄構造函數

示例 431

17.3.4  創建記錄的getter方法 432

17.4  instanceof的模式匹配 434

17.4.1  邏輯AND表達式中的

模式變量 435

17.4.2  其他語句中的模式匹配 436

17.5  密封類和密封接口 437

17.5.1  密封類 437

17.5.2  密封接口 438

17.6  未來的方向 440

 

第 II 部分  Java庫

第18章  字符串處理 443

18.1  String類的構造函數 443

18.2  字符串的長度 445

18.3  特殊的字符串操作 446

18.3.1  字符串字面值 446

18.3.2  字符串連接 446

18.3.3  字符串和其他數據類型的

連接 447

18.3.4  字符串轉換和toString()

方法 447

18.4  提取字符 449

18.4.1  charAt() 449

18.4.2  getChars() 449

18.4.3  getBytes() 450

18.4.4  toCharArray() 450

18.5  比較字符串 450

18.5.1  equals()和

equalsIgnoreCase() 450

18.5.2  regionMatches() 451

18.5.3  startsWith()和

endsWith() 451

18.5.4  equals()與== 452

18.5.5  compareTo() 452

18.6  查找字符串 454

18.7  修改字符串 455

18.7.1  substring() 455

18.7.2  concat() 456

18.7.3  replace() 457

18.7.4  trim()和strip() 457

18.8  使用valueOf()轉換數據 458

18.9  改變字符串中字符的大小寫 459

18.10  連接字符串 459

18.11  其他String方法 460

18.12  StringBuffer類 461

18.12.1  StringBuffer類的構造

函數 462

18.12.2  length()與capacity() 462

18.12.3  ensureCapacity() 463

18.12.4  setLength() 463

18.12.5  charAt()與setCharAt() 463

18.12.6  append() 464

18.12.7  insert() 464

18.12.8  reverse() 465

18.12.9  delete()與

deleteCharAt() 465

18.12.10  replace() 466

18.12.11  substring() 466

18.12.12  其他StringBuffer

方法 467

18.13  StringBuilder類 468

第19章  探究java.lang 469

19.1  基本類型封裝器 470

19.1.1  Number 470

19.1.2  Double與Float 470

19.1.3  理解isInfinite()與

isNaN() 474

19.1.4  Byte、Short、Integer和

Long 474

19.1.5  Character 483

19.1.6  對Unicode代碼點的

附加支持 485

19.1.7  Boolean 487

19.2  Void類 488

19.3  Process類 488

19.4  Runtime類 489

19.5  Runtime.Version 491

19.6  ProcessBuilder類 492

19.7  System類 494

19.7.1  使用currentTimeMillis()

為程序的執行計時 496

19.7.2  使用arraycopy()方法 496

19.7.3  環境屬性 497

19.8  System.Logger和

System.LoggerFinder 498

19.9  Object類 498

19.10  使用clone()方法和

Cloneable接口 498

19.11  Class類 500

19.12  ClassLoader類 504

19.13  Math類 504

19.13.1  三角函數 504

19.13.2  指數函數 505

19.13.3  舍入函數 505

19.13.4  其他數學方法 506

19.14  StrictMath類 508

19.15  Compiler類 508

19.16  Thread類、ThreadGroup類

和Runnable接口 508

19.16.1  Runnable接口 509

19.16.2  Thread類 509

19.16.3  ThreadGroup類 511

19.17  ThreadLocal和

InheritableThreadLocal類 515

19.18  Package類 515

19.19  Module類 516

19.20  ModuleLayer類 517

19.21  RuntimePermission類 517

19.22  Throwable類 517

19.23  SecurityManager類 518

19.24  StackTraceElement類 518

19.25  StackWalker類和

StackWalker.StackFrame

接口 518

19.26  Enum類 519

19.27  Record類 519

19.28  ClassValue類 519

19.29  CharSequence接口 520

19.30  Comparable接口 520

19.31  Appendable接口 520

19.32  Iterable接口 521

19.33  Readable接口 521

19.34  AutoCloseable接口 522

19.35  Thread.UncaughtException

Handler接口 522

19.36  java.lang子包 522

19.36.1  java.lang.annotation 522

19.36.2  java.lang.constant 523

19.36.3  java.lang.instrument 523

19.36.4  java.lang.invoke 523

19.36.5  java.lang.management 523

19.36.6  java.lang.module 523

19.36.7  java.lang.ref 523

19.36.8  java.lang.reflect 523

第20章  java.util第一部分:集合

框架 524

20.1  集合概述 525

20.2  集合接口 526

20.2.1  Collection接口 527

20.2.2  List接口 529

20.2.3  Set接口 531

20.2.4  SortedSet接口 532

20.2.5  NavigableSet接口 532

20.2.6  Queue接口 533

20.2.7  Deque接口 534

20.3  集合類 536

20.3.1  ArrayList類 536

20.3.2  LinkedList類 539

20.3.3  HashSet類 541

20.3.4  LinkedHashSet類 542

20.3.5  TreeSet類 543

20.3.6  PriorityQueue類 544

20.3.7  ArrayDeque類 545

20.3.8  EnumSet類 546

20.4  通過迭代器訪問集合 547

20.4.1  使用迭代器 548

20.4.2  使用for-each循環替代

迭代器 549

20.5  Spliterator 550

20.6  在集合中存儲用戶定義的類 553

20.7  RandomAccess接口 554

20.8  使用映射 554

20.8.1  映射接口 555

20.8.2  映射類 560

20.9  比較器 565

20.10  集合算法 573

20.11  Arrays類 578

20.12  遺留的類和接口 583

20.12.1  Enumeration接口 584

20.12.2  Vector類 584

20.12.3  Stack類 588

20.12.4  Dictionary類 590

20.12.5  Hashtable類 591

20.12.6  Properties類 594

20.12.7  使用store()和load()

方法 597

20.13  集合小結 599

第21章  java.util第二部分:更多

實用工具類 600

21.1  StringTokenizer類 600

21.2  BitSet類 602

21.3  Optional、OptionalDouble、

OptionalInt和OptionalLong 604

21.4  Date類 607

21.5  Calendar類 608

21.6  GregorianCalendar類 611

21.7  TimeZone類 613

21.8  SimpleTimeZone類 614

21.9  Locale類 615

21.10  Random類 616

21.11  Timer和TimerTask類 618

21.12  Currency類 620

21.13  Formatter類 621

21.13.1  Formatter類的構造

函數 622

21.13.2  Formatter類的方法 622

21.13.3  格式化的基礎知識 623

21.13.4  格式化字符串和字符 625

21.13.5  格式化數字 625

21.13.6  格式化時間和日期 626

21.13.7  %n和%%說明符 628

21.13.8  指定最小字段寬度 628

21.13.9  指定精度 629

21.13.10  使用格式標志 630

21.13.11  對齊輸出 631

21.13.12  空格、+、0和(標志 631

21.13.13  逗號標志 633

21.13.14  #標志 633

21.13.15  大寫選項 633

21.13.16  使用參數索引 634

21.13.17  關閉Formatter對象 635

21.13.18  printf()方法 635

21.14  Scanner類 635

21.14.1  Scanner類的構造

函數 636

21.14.2  掃描的基礎知識 637

21.14.3  一些Scanner示例 639

21.14.4  設置定界符 643

21.14.5  其他Scanner特性 644

21.15  ResourceBundle、

ListResourceBundle和

PropertyResourceBundle類 645

21.16  其他實用工具類和接口 649

21.17  java.util子包 650

21.17.1  java.util.concurrent、

java.util.concurrent.atomic

和java.util.concurrent.

locks 651

21.17.2  java.util.function 651

21.17.3  java.util.jar 653

21.17.4  java.util.logging 653

21.17.5  java.util.prefs 654

21.17.6  java.util.random 654

21.17.7  java.util.regex 654

21.17.8  java.util.spi 654

21.17.9  java.util.stream 654

21.17.10  java.util.zip 654

第22章  輸入/輸出:探究java.io 655

22.1  I/O類和接口 655

22.2  File類 656

22.2.1  目錄 659

22.2.2  使用FilenameFilter

接口 660

22.2.3  listFiles()方法 661

22.2.4  創建目錄 662

22.3  AutoCloseable、Closeable和

Flushable接口 662

22.4  I/O異常 662

22.5  關閉流的兩種方式 663

22.6  流類 664

22.7  字節流 664

22.7.1  InputStream類 664

22.7.2  OutputStream類 665

22.7.3  FileInputStream類 666

22.7.4  FileOutputStream類 668

22.7.5  ByteArrayInputStream類 670

22.7.6  ByteArrayOutputStream

類 672

22.7.7  過濾的字節流 673

22.7.8  緩沖的字節流 673

22.7.9  SequenceInputStream類 677

22.7.10  PrintStream類 679

22.7.11  DataOutputStream類

和DataInputStream類 681

22.7.12  RandomAccessFile類 683

22.8  字符流 683

22.8.1  Reader類 684

22.8.2  Writer類 684

22.8.3  FileReader類 685

22.8.4  FileWriter類 686

22.8.5  CharArrayReader類 687

22.8.6  CharArrayWriter類 688

22.8.7  BufferedReader類 689

22.8.8  BufferedWriter類 691

22.8.9  PushbackReader類 691

22.8.10  PrintWriter類 692

22.9  Console類 693

22.10  串行化 695

22.10.1  Serializable接口 695

22.10.2  Externalizable接口 695

22.10.3  ObjectOutput接口 696

22.10.4  ObjectOutputStream類 696

22.10.5  ObjectInput接口 697

22.10.6  ObjectInputStream類 698

22.10.7  串行化示例 699

22.11  流的優點 702

第23章  探究NIO 703

23.1  NIO類 703

23.2  NIO的基礎知識 704

23.2.1  緩沖區 704

23.2.2  通道 706

23.2.3  字符集和選擇器 707

23.3  NIO.2對NIO的增強 708

23.3.1  Path接口 708

23.3.2  Files類 709

23.3.3  Paths類 712

23.3.4  文件屬性接口 712

23.3.5  FileSystem、FileSystems和

FileStore類 714

23.4  使用NIO系統 714

23.4.1  為基於通道的I/O

使用NIO 715

23.4.2  為基於流的I/O

使用NIO 723

23.4.3  為路徑和文件系統操作

使用NIO 725

第24章  聯網 734

24.1  聯網的基礎知識 734

24.2  java.net聯網類和接口 735

24.3  InetAddress類 736

24.3.1  工廠方法 736

24.3.2  實例方法 737

24.4  Inet4Address類和

Inet6Address類 738

24.5  TCP/IP客戶端套接字 738

24.6  URL類 741

24.7  URLConnection類 742

24.8  HttpURLConnection類 745

24.9  URI類 746

24.10  cookie 746

24.11  TCP/IP服務器套接字 747

24.12  數據報 747

24.12.1  DatagramSocket類 748

24.12.2  DatagramPacket類 748

24.12.3  數據報示例 749

24.13  java.net.http包 751

24.13.1  三個關鍵元素 751

24.13.2  一個簡單的HTTP Client

示例 754

24.13.3  有關java.net.http的

進一步探討 755

第25章  事件處理 756

25.1  兩種事件處理機制 756

25.2  委托事件模型 757

25.2.1  事件 757

25.2.2  事件源 757

25.2.3  事件監聽器 758

25.3  事件類 758

25.3.1  ActionEvent類 759

25.3.2  AdjustmentEvent類 760

25.3.3  ComponentEvent類 761

25.3.4  ContainerEvent類 761

25.3.5  FocusEvent類 762

25.3.6  InputEvent類 763

25.3.7  ItemEvent類 764

25.4  KeyEvent類 764

25.4.1  MouseEvent類 765

25.4.2  MouseWheelEvent類 766

25.4.3  TextEvent類 767

25.4.4  WindowEvent類 767

25.5  事件源 768

25.6  事件監聽器接口 769

25.6.1  ActionListener接口 770

25.6.2  AdjustmentListener

接口 770

25.6.3  ComponentListener

接口 770

25.6.4  ContainerListener接口 770

25.6.5  FocusListener接口 770

25.6.6  ItemListener接口 770

25.6.7  KeyListener接口 771

25.6.8  MouseListener接口 771

25.6.9  MouseMotionListener

接口 771

25.6.10  MouseWheelListener

接口 771

25.6.11  TextListener接口 771

25.6.12  WindowFocusListener

接口 772

25.6.13  WindowListener接口 772

25.7  使用委托事件模型 772

25.7.1  一些重要的AWT GUI

概念 772

25.7.2  處理鼠標事件 773

25.7.3  處理鍵盤事件 776

25.8  適配器類 780

25.9  內部類 782

第26章  AWT介紹:使用窗口、

圖形和文本 786

26.1  AWT類 787

26.2  窗口基本元素 788

26.2.1  Component類 789

26.2.2  Container類 789

26.2.3  Panel類 789

26.2.4  Window類 789

26.2.5  Frame類 789

26.2.6  Canvas類 790

26.3  使用框架窗口 790

26.3.1  設置窗口的尺寸 790

26.3.2  隱藏和顯示窗口 790

26.3.3  設置窗口的標題 791

26.3.4  關閉框架窗口 791

26.3.5  paint()方法 791

26.3.6  顯示字符串 791

26.3.7  設置前景色和背景色 792

26.3.8  請求重畫 792

26.3.9  創建基於框架的應用

程序 793

26.4  使用圖形 794

26.4.1  繪制直線 794

26.4.2  繪制矩形 794

26.4.3  繪制橢圓和圓 795

26.4.4  繪制弧形 795

26.4.5  繪制多邊形 795

26.4.6  演示繪制方法 795

26.4.7  改變圖形的大小 797

26.5  使用顏色 798

26.5.1  Color類的方法 799

26.5.2  設置當前圖形的顏色 800

26.5.3  一個演示顏色的程序 800

26.6  設置繪圖模式 801

26.7  使用字體 803

26.7.1  確定可用字體 804

26.7.2  創建和選擇字體 805

26.7.3  獲取字體信息 807

26.8  使用FontMetrics管理文本

輸出 808

第27章  使用AWT控件、佈局

管理器和菜單 812

27.1  AWT控件的基礎知識 812

27.1.1  添加和移除控件 813

27.1.2  響應控件 813

27.1.3  HeadlessException異常 813

27.2  使用標簽 813

27.3  使用命令按鈕 815

27.4  使用復選框 819

27.5  使用復選框組 822

27.6  使用下拉列表 823

27.7  使用列表框 826

27.8  管理滾動條 829

27.9  使用TextField 832

27.10  使用TextArea 834

27.11  理解佈局管理器 836

27.11.1  FlowLayout佈局

管理器 837

27.11.2  BorderLayout佈局

管理器 838

27.11.3  使用Insets 839

27.11.4  GridLayout佈局

管理器 841

27.11.5  CardLayout佈局

管理器 842

27.11.6  GridBagLayout佈局

管理器 845

27.12  菜單欄和菜單 850

27.13  對話框 854

27.14  關於重寫paint()方法 859

第28章  圖像 860

28.1  文件格式 860

28.2  圖像基礎知識:創建、

加載與顯示 861

28.2.1  創建Image對象 861

28.2.2  加載圖像 861

28.2.3  顯示圖像 862

28.3  雙緩沖 863

28.4  ImageProducer接口 866

28.5  ImageConsumer接口 867

28.6  ImageFilter類 870

28.6.1  CropImageFilter類 870

28.6.2  RGBImageFilter類 872

28.7  其他圖像類 883

第29章  並發實用工具 884

29.1  並發API包 885

29.1.1  java.util.concurrent包 885

29.1.2  java.util.concurrent.

atomic包 886

29.1.3  java.util.concurrent.

locks包 886

29.2  使用同步對象 886

29.2.1  Semaphore類 886

29.2.2  CountDownLatch類 892

29.2.3  CyclicBarrier類 893

29.2.4  Exchanger類 896

29.2.5  Phaser類 898

29.3  使用執行器 905

29.3.1  一個簡單的執行器示例 906

29.3.2  使用Callable和Future

接口 908

29.4  TimeUnit枚舉 910

29.5  並發集合 911

29.6  鎖 912

29.7  原子操作 915

29.8  通過Fork/Join框架進行

並行編程 916

29.8.1  主要的Fork/Join類 916

29.8.2  分而治之的策略 919

29.8.3  一個簡單的Fork/Join

示例 920

29.8.4  理解並行級別帶來的

影響 922

29.8.5  一個使用

RecursiveTask<V>的

例子 925

29.8.6  異步執行任務 928

29.8.7  取消任務 928

29.8.8  確定任務的完成狀態 928

29.8.9  重新啟動任務 929

29.8.10  深入研究 929

29.8.11  關於Fork/Join框架的

一些提示 930

29.9  並發實用工具與Java傳統

方式的比較 931

第30章  流API 932

30.1  流的基礎知識 932

30.1.1  流接口 933

30.1.2  如何獲得流 935

30.1.3  一個簡單的流示例 935

30.2  縮減操作 938

30.3  使用並行流 941

30.4  映射 943

30.5  收集 947

30.6  迭代器和流 950

30.6.1  對流使用迭代器 950

30.6.2  使用Spliterator 951

30.7  流API中更多值得探究的

地方 954

第31章  正則表達式和其他包 955

31.1  正則表達式處理 955

31.1.1  Pattern類 955

31.1.2  Matcher類 956

31.1.3  正則表達式的語法 957

31.1.4  演示模式匹配 957

31.1.5  模式匹配的兩個選項 962

31.1.6  探究正則表達式 963

31.2  反射 963

31.3  遠程方法調用 967

31.4  使用java.text格式化日期和

時間 970

31.4.1  DateFormat類 970

31.4.2  SimpleDateFormat類 972

31.5  java.time的時間和日期API 974

31.5.1  時間和日期的基礎知識 974

31.5.2  格式化日期和時間 975

31.5.3  解析日期和時間字符串 978

31.5.4  探究java.time包的其他

方面 979

 

第 III 部分  使用Swing進行GUI編程

第 32 章  Swing簡介 983

32.1  Swing的起源 983

32.2  Swing的構建以AWT為

基礎 984

32.3  兩個關鍵的Swing特性 984

32.3.1  Swing組件是輕量級的 984

32.3.2  Swing支持可插入外觀 984

32.4  MVC連接 985

32.5  組件與容器 985

32.5.1  組件 986

32.5.2  容器 986

32.5.3  頂級容器窗格 987

32.6  Swing包 987

32.7  一個簡單的Swing應用程序 987

32.8  事件處理 991

32.9  在Swing中繪圖 994

32.9.1  繪圖的基礎知識 994

32.9.2  計算可繪制區域 995

32.9.3  一個繪圖示例 996

第33章  探索Swing 999

33.1  JLabel與ImageIcon 999

33.2  JTextField 1001

33.3  Swing按鈕 1003

33.3.1  JButton 1003

33.3.2  JToggleButton 1005

33.3.3  復選框 1007

33.3.4  單選按鈕 1009

33.4  JTabbedPane 1011

33.5  JScrollPane 1014

33.6  JList 1015

33.7  JComboBox 1018

33.8  樹 1020

33.9  JTable 1024

第34章  Swing菜單簡介 1027

34.1  菜單的基礎知識 1027

34.2  JMenuBar、JMenu和

JMenuItem概述 1028

34.2.1  JMenuBar 1029

34.2.2  JMenu 1029

34.2.3  JMenuItem 1030

34.3  創建主菜單 1031

34.4  向菜單項添加助記符和

加速鍵 1035

34.5  向菜單項添加圖片和

工具提示 1037

34.6  使用JRadioButtonMenuItem和

JCheckBoxMenuItem 1038

34.7  創建彈出菜單 1040

34.8  創建工具欄 1043

34.9  使用動作 1045

34.10  完整演示MenuDemo

程序 1050

34.11  繼續探究Swing 1057

 

第 IV 部分  應用Java

第35章  Java Bean 1061

35.1  Java Bean是什麽 1061

35.2  Java Bean的優勢 1062

35.3  內省 1062

35.3.1  屬性的設計模式 1062

35.3.2  事件的設計模式 1063

35.3.3  方法與設計模式 1064

35.3.4  使用BeanInfo接口 1064

35.4  綁定屬性與約束屬性 1065

35.5  持久性 1065

35.6  定製器 1065

35.7  Java Bean API 1065

35.7.1  Introspector類 1067

35.7.2  PropertyDescriptor類 1067

35.7.3  EventSetDescriptor類 1067

35.7.4  MethodDescriptor類 1067

35.8  一個Bean示例 1068

第36章  servlet 1071

36.1  背景 1071

36.2  servlet的生命周期 1072

36.3  servlet開發選項 1072

36.4  使用Tomcat 1073

36.5  一個簡單的servlet 1074

36.5.1  創建和編譯servlet

源代碼 1074

36.5.2  啟動Tomcat 1075

36.5.3  啟動Web瀏覽器並

請求servlet 1075

36.6  Servlet API 1075

36.7  jakarta.servlet包 1076

36.7.1  Servlet接口 1076

36.7.2  ServletConfig接口 1077

36.7.3  ServletContext接口 1077

36.7.4  ServletRequest接口 1078

36.7.5  ServletResponse接口 1078

36.7.6  GenericServlet類 1079

36.7.7  ServletInputStream類 1079

36.7.8  ServletOutputStream類 1079

36.7.9  servlet異常類 1079

36.8  讀取servlet參數 1079

36.9  jakarta.servlet.http包 1081

36.9.1  HttpServletRequest

接口 1081

36.9.2  HttpServletResponse

接口 1082

36.9.3  HttpSession接口 1083

36.9.4  Cookie類 1084

36.9.5  HttpServlet類 1085

36.10  處理HTTP請求和響應 1086

36.10.1  處理HTTP GET

請求 1086

36.10.2  處理HTTP POST

請求 1087

36.11  使用cookie 1088

36.12  會話跟蹤 1091

 

第 V 部分  附錄

附錄A  使用Java的文檔註釋 1095

附錄B  JShell簡介 1103

附錄C  在一個步驟中編譯和運行

簡單的單文件程序 1112