本書以幽默詼諧的寫作方式,由淺入深、圖文并茂地講解了使用Java進(jìn)行程序開發(fā)所需要的知識和技術(shù)。結(jié)合具體實例,書中介紹了變量、基本數(shù)據(jù)類型、控制流程等基本概念,以及泛型、lambda、JavaFX等高級概念,同時論述了如何正確編寫面向?qū)ο蟪绦,哪些是好的、哪些是壞的編程?xí)慣,如何讓代碼可讀性更強,面向服務(wù)架構(gòu)和函數(shù)式編程的區(qū)別,如何測試,等等。除此之外,書中還講解了XML、CSS、SQL等相關(guān)知識。
一本與眾不同的Java入門書籍,打破你對Java學(xué)習(xí)的認(rèn)知。
全面介紹Java入門知識:
· 簡單的安裝和第一個程序
· 類、繼承、多態(tài)等面向?qū)ο缶幊谈拍?· 種類繁多的數(shù)據(jù)結(jié)構(gòu)
· lambda的好處
· 適用性廣的XML解析器
· 多彩的GUI編程
· 受控的流和數(shù)據(jù)庫
· 不再糾結(jié)的多線程
· 無須畏懼的正則表達(dá)式
PS:如果你在書中見到倒印的文字,不要擔(dān)心,這不是印刷錯誤,那是為了讓你自己探索練習(xí)題而特意將參考答案倒印的。
菲利普·阿克曼(Philip Ackermann)是德國弗勞恩霍夫應(yīng)用信息技術(shù)研究所的軟件開發(fā)人員,計算機(jī)科學(xué)碩士。他對Java虛擬機(jī)和整潔代碼充滿熱情,能駕輕就熟地工作在不同的開發(fā)環(huán)境中,或者輾轉(zhuǎn)在Java和Node.js之間,還能游刃有余地應(yīng)對小薛提出的CSS、XML、SQL或其他語言的問題。
第1章 你好!小薛
引言和第一個程序
Java無處不在 2
JRE,JDK,SE,EE,ME 2
安裝Java 3
Hallo Schr dinger 6
手動編譯 7
運行程序 10
了解編譯器和Java虛擬機(jī) 11
階段練習(xí) 12
獨立完成練習(xí) 13
開發(fā)環(huán)境 15
安裝Eclipse 15
工作區(qū)和工作臺 16
第一個項目 18
打包要有序 21
輕而易舉地創(chuàng)建一個包 23
用Eclipse創(chuàng)建一個新的類 24
與程序進(jìn)行交互 26
什么是流 28
游戲開始——“文字冒險” 30
Java的歷史 35
第2章 萬物皆是數(shù)據(jù)類型
變量和基本數(shù)據(jù)類型
變量和數(shù)據(jù)類型 40
數(shù)據(jù)類型的分類 41
數(shù)字類型有哪些 42
長數(shù)字的新讀法 45
數(shù)字小練習(xí) 46
二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制 47
變量名的命名規(guī)則 49
Java語言編碼規(guī)范——選擇有效的變量名 51
運算和運算符 53
深入研究除法運算 54
用 BigDecimal 進(jìn)行精確計算 55
自增和自減語句 56
計算練習(xí) 57
數(shù)字類型的轉(zhuǎn)換 58
字符類型變量 60
階段練習(xí)——凱撒字母加密法 62
非真即假 64
關(guān)系運算符 66
階段練習(xí)——說出真相! 67
包裝類 69
數(shù)字類型練習(xí) 72
字符類型練習(xí) 73
總結(jié) 74
第3章 我是不是曾經(jīng)到過這里!
Java的流程控制語句
流程控制的應(yīng)用 78
要是生活中沒有“如果”該多好 78
語句的嵌套 79
if-else判斷語句 80
階段練習(xí)——條件分支 81
布爾運算符 83
也可以不用加“花括號” 83
判定條件的縮寫形式 84
條件運算符( 表達(dá)式) 85
多條件判定語句(switch語句) 85
階段練習(xí) 87
switch語句的字符串參數(shù) 88
遠(yuǎn)離現(xiàn)實 89
玩轉(zhuǎn)循環(huán) 92
循環(huán)嵌套 95
循環(huán)語句練習(xí) 96
編程練習(xí)——查找質(zhì)數(shù) 96
綜合練習(xí)——小薛的皇冠 100
調(diào)試程序 103
中斷循環(huán) 106
循環(huán)的標(biāo)簽 107
綜合練習(xí)——打印日歷 108
本章總結(jié) 112
第4章 字符串的“盛宴”
有關(guān)字符串的操作
字符串的定義 114
訪問字符串中的字符 116
字符串的拆分 117
字符和字符串的運算 120
字符串的比較 123
部分字符串的比較 123
階段練習(xí)——字符串比較 125
字符串的查找和替換操作 127
階段練習(xí)——菜單黑客 129
字符串類對象的創(chuàng)建 131
字符串池更專業(yè)的分析 135
字符串是不可改變的 139
可以被改變的字符串 140
字符的刪除、替換以及鏡像 142
階段練習(xí) 144
本章總結(jié) 145
第5章 對象,一個特別的類
類、對象和方法
代碼的重復(fù)使用——方法 148
代碼的重構(gòu) 152
提高代碼的可讀性 156
方法的注釋 157
方法的返回值 158
階段練習(xí)——天氣預(yù)報 159
初識類和對象 160
封裝 164
set和get方法 166
階段練習(xí) 169
多參數(shù)的set方法 170
階段練習(xí)——類和對象 172
變量和方法的訪問權(quán)限 174
構(gòu)造函數(shù) 176
對象轉(zhuǎn)換成字符串型數(shù)據(jù) 180
關(guān)聯(lián)源代碼 181
原文輸出對象的內(nèi)容 182
流暢接口 183
創(chuàng)建對象的流程 185
引用類型、堆和垃圾回收機(jī)制 189
如果堆滿了怎么辦 191
析構(gòu)函數(shù) 192
請慎用堆 193
安裝Eclipse的虛擬機(jī) 193
另一個存儲空間:棧 202
對比棧和堆的使用情況 204
階段練習(xí)——這事兒是貓干的 206
階段練習(xí)——棧還是堆 208
第6章 他到底是從哪里來的
繼承
繼承 212
繼承可以減少重復(fù)編寫代碼的工作量 214
有其父必有其子 216
通過方法的重寫制定行為 217
禁止重寫方法 219
階段練習(xí)——小花的繼承關(guān)系 220
可以訪問“祖父類”嗎 222
繼承和構(gòu)造函數(shù) 224
構(gòu)造函數(shù)鏈的修復(fù) 225
階段練習(xí)——構(gòu)造函數(shù) 228
階段練習(xí)——繼承關(guān)系 229
引用型數(shù)據(jù)的強制類型轉(zhuǎn)換 232
向上轉(zhuǎn)型 233
類型轉(zhuǎn)換 234
方法的重載 235
階段練習(xí)——訂閱服務(wù) 236
面向服務(wù)和面向?qū)ο蟪绦蛟O(shè)計 238
面向?qū)ο蟪绦蛟O(shè)計的解決方案 239
階段練習(xí)——重載 240
階段練習(xí)——登臺表演 241
本章總結(jié) 243
第7章 接口,疼痛的記憶
抽象類和接口
抽象類 246
抽象方法 248
階段練習(xí)——不管是數(shù)字的還是模擬的,抽象的才是關(guān)鍵! 250
階段練習(xí)——都是抽象的嗎 258
接口 259
階段練習(xí)——接口的應(yīng)用 264
接口和多態(tài)…… 266
接口和繼承 267
寧少勿多…… 269
接口中的常量 270
常量類中的常量 270
靜態(tài)導(dǎo)入 271
靜態(tài)塊 272
枚舉常量 273
接口內(nèi)容復(fù)習(xí) 274
類的其他形式 275
靜態(tài)成員類 275
非靜態(tài)成員類 277
局部類 278
匿名類 279
抽象類和多態(tài)——小薛,你是不是都明白了? 281
第8章 你真的了解你所有的鞋嗎
數(shù)組、集合和映射
我想有更多的貓,交更多的女朋友 284
對象的欲望 286
多維數(shù)組 287
全都給我吧 288
你已經(jīng)有這樣的鞋了! 289
凡事都要親力親為 290
探索對象的相同性 292
到底是相同還是不同 293
數(shù)組自己不會增長 293
集合 295
完善買鞋的測試程序! 297
階段練習(xí) 299
迭代器 300
Link和List 301
“機(jī)不可失,失不再來” 302
Hash的春天 303
階段練習(xí)——Set輔助刑警破案 304
階段練習(xí)——Set結(jié)構(gòu)的買鞋測試程序 307
生成哈希碼 308
樹和房間 311
是大碼還是小碼 313
不用樹結(jié)構(gòu)排序 316
階段練習(xí)——鞋的排序 318
映射 319
階段練習(xí)——你已經(jīng)有這么多雙鞋了 320
后進(jìn)先出棧 323
請排隊,好嗎 324
終于到Java 8 的lambda表達(dá)式了 325
filter()、map()和reduce() 327
階段練習(xí)——高跟鞋!! 331
本章內(nèi)容回顧——lambda表達(dá)式 333
第9章 異常和異常處理
異常處理
從錯誤變成異常 336
第一個異常 337
拋出異常前的準(zhǔn)備 338
要學(xué)會捕獲異常 340
善后工作——finally語句塊 342
階段練習(xí)——自定義異常處理 343
異常的繼承 345
異常用來交互信息——究竟發(fā)生了什么異常 346
降低報錯信息的“耦合性” 348
重新拋出異常 349
如何進(jìn)行異常處理 350
階段練習(xí)——轉(zhuǎn)發(fā)異常的另一種方式 351
不必捕獲的異常——未檢查型異常 353
防御式編程和運行時異常 356
異常處理日志 357
讓門衛(wèi)一起記錄日志 358
不用再搶救了 360
階段練習(xí)——內(nèi)存滿了 362
自動關(guān)閉資源 363
讀取文件操作 364
規(guī)則也有例外 366
第10章 嘿,伙計,你不能進(jìn)來!
泛型
通用類型 370
泛型出現(xiàn)之前 371
使用泛型以后 372
階段練習(xí)——貓狗大戰(zhàn) 374
貓籃子還可以作為子類 375
標(biāo)準(zhǔn)化接口 376
通配符表達(dá)問題 377
上限通配符 380
麻煩:不允許小薛進(jìn)行寫操作 381
下限通配符 384
泛型方法 386
階段練習(xí)——通配符 387
復(fù)習(xí)內(nèi)容 390
咖啡渣——本章中的“干貨” 393
第11章 狂野的洪流——輸入和輸出
文件、流和序列化
Bossingen帶來的文件 396
再來點嗎?試試二進(jìn)制! 397
二進(jìn)制文件的寫入操作——字節(jié)輸出流 399
巨慢——復(fù)制文件的普通流操作 400
更快些——復(fù)制文件的字節(jié)緩存流操作 401
誰還讀取字節(jié)呀?文本文件的字符流讀取操作 402
文本文件的字符流寫入操作 403
CSV——文本文件的轉(zhuǎn)換 404
向目錄開炮 407
終于整理好了——生成文件和目錄 408
客戶信息轉(zhuǎn)換流水線 410
精細(xì)過濾是成功的一半——目錄的過濾 412
走在正確的“路徑”上:新的文件IO API 413
客戶信息轉(zhuǎn)換——現(xiàn)在更簡單了 416
對象的保存 418
嵌套對象的序列化 421
影響序列化和反序列化 423
用writeObject()和readObject()方法實現(xiàn)自定義序列化 424
階段練習(xí)——榆木的腦袋和聰明的腦袋 426
回顧關(guān)于流的內(nèi)容 428
第12章 保持聯(lián)系
線程
進(jìn)程與線程 430
第一個線程 432
激活線程之夜 433
輸出偶數(shù)還是奇數(shù) 435
獲得線程狀態(tài) 437
線程睡覺了 438
英雄,當(dāng)心! 439
等待其他人 442
同步 443
階段練習(xí)——先來一份偶數(shù),謝謝! 446
線程死鎖! 447
發(fā)現(xiàn)和避免死鎖 449
成功的關(guān)鍵 451
活鎖、餓死、優(yōu)先級和啤酒 453
活鎖 453
設(shè)置優(yōu)先級 456
等待和通知 458
餓死 460
階段練習(xí)——等待和睡覺 462
綜合練習(xí)——兩位英雄對4000個獸人,各司其職 463
本章總結(jié)——防止你“掉線” 467
第13章 應(yīng)該可以看到結(jié)果!
部署程序和生成文檔
打包程序 470
階段練習(xí)——打包JAR文件 473
Java Web Start 475
在Eclipse中添加函數(shù)庫 477
你好,Doc大叔——用javadoc生成文檔 480
結(jié)構(gòu)化和模塊化 483
階段練習(xí)——模塊化?明白! 487
編譯模塊 489
現(xiàn)在你已經(jīng)學(xué)會打包了 491
第14章 交換學(xué)生——數(shù)據(jù)的交互格式
XML
XML 494
俄羅斯臘腸 500
階段練習(xí)——XML的音樂學(xué)校 505
到底是元素還是屬性 507
讀取XML文檔 508
追蹤犬——SAX 508
訓(xùn)練有素的追蹤犬還是“不要打給我,
我會打給你的”——StAX 512
Cursor API 513
Iterator API 513
文檔對象模型 515
階段練習(xí)——Flower Power 518
編寫XML文檔 520
階段練習(xí)——1、2還是3?SAX,StAX還是DOM?
什么時候該用什么? 523
條條大路通Java 525
JAXB 527
從XML轉(zhuǎn)換到Java及反向轉(zhuǎn)換 529
階段練習(xí)——花之力量 531
關(guān)于X某某的總結(jié) 535
第15章 用JDBC保存數(shù)據(jù)
數(shù)據(jù)庫
關(guān)系型數(shù)據(jù)庫 538
第一個SQL表格 539
生成鏈接 543
添加數(shù)據(jù)記錄 545
階段練習(xí)——英雄和郵票 547
指令總結(jié) 550
準(zhǔn)備就緒 551
讀取數(shù)據(jù) 552
什么是你想要的?根據(jù)條件篩選數(shù)據(jù)記錄 554
數(shù)據(jù)排序后輸出 556
階段練習(xí)——誰是最強者 557
連接多個表中的信息 561
所有都得重來——事務(wù) 562
關(guān)系型數(shù)據(jù)庫和Java對象間的映射 564
階段練習(xí)——把魔鬼滾回去 565
復(fù)習(xí) 568
本章最重要的部分 569
第16章 全新的舞步
用Swing和JavaFX來實現(xiàn)GUI編程
離開控制臺的動力——Swing 572
全部都在框架里——如何生成GUI組件 572
全部要行列對齊——怎么布局GUI組件 575
用網(wǎng)格布局把所有組件放在網(wǎng)格里 578
用網(wǎng)格包布局合并單元格 580
階段練習(xí)——鞋放在盒子里好,還是放在網(wǎng)格里好 584
布局好了,但是動作……還沒有呢?怎么給GUI組件添加動作 587
用Swing實現(xiàn)用戶輸入信息驗證 591
階段練習(xí)——販鞋商人 592
更絢麗、更多功能的JavaFX 596
JavaFX正式登臺表演 598
再用CSS加些“味道” 602
添加動作 604
JavaFX中對用戶輸入數(shù)據(jù)的驗證 605
階段練習(xí)——用JavaFX來做交易 606
專業(yè)做法——無須監(jiān)聽器為組件添加動作 607
帶行為的滑塊 609
核心專家的綁定方案同樣可以解決 610
粉刷匠和油漆工學(xué)徒的考試重點 613
第17章 走向世界
國際化、本地化、格式化、模式匹配和正則表達(dá)式
本地化 616
軟件的國際化 619
階段練習(xí)——芬蘭語的鞋盒 621
鐘情于英語 624
類的加載 625
階段練習(xí)——想要紅酒還是啤酒 627
數(shù)字和貨幣的格式化 629
日期和時間的格式化 630
階段練習(xí)——貨幣換算器 632
文本消息的格式化 634
新版日期/時間API 635
時區(qū)、時間軸、時間點和時段 636
不需要時間軸表示日期、時間和時段 638
時區(qū)和時差 640
只要再多一點時間,一切就都清楚了 641
日期和時間的格式化 642
字符串類的格式化 643
階段練習(xí)——格式化走起! 645
用正則表達(dá)式進(jìn)行樣式匹配 646
階段練習(xí)——這個電話號碼不要連接符 651
尋找字符串的子串 651
階段練習(xí)——匹配還是不匹配?不算難事! 653
通過組獲取某個子串 654
E-Mail地址的認(rèn)證 655
本章重要內(nèi)容總結(jié) 657
第18章 你確定結(jié)果正確嗎?單元測試和Java Web Start的后續(xù)內(nèi)容
單元測試
單元測試 660
測試框架 661
階段練習(xí)——可我已經(jīng)訂了一份雞尾酒 668
異常情況的測試 672
階段練習(xí)——根本不難喝呀 674
JWS后續(xù)內(nèi)容 676
這一單元里最重要的知識 679