出版時間:2002-9 出版社:機(jī)械工業(yè)出版社 作者:[美] Bruce Eckel 頁數(shù):809 譯者:侯捷
Tag標(biāo)簽:無
內(nèi)容概要
本書的內(nèi)容組織、講授方法、選用示例和附帶練習(xí)都別具特色。作者根據(jù)多年教學(xué)實踐中發(fā)現(xiàn)的問題,通過簡練的示例和敘述,闡明了在學(xué)習(xí)Java中特別容易混淆的諸多概念。與前一版相比,本書不但新增了Java2的語言特性,還根據(jù)語言的演變作出了徹底的更新,其中最主要的改變是第9章的群集。
本書被多家權(quán)威機(jī)構(gòu)評為最佳Java書籍,適合作為各個層次的Java程序員閱讀,也可以作為高等院校面向?qū)ο蟪绦蛟O(shè)計語言及Java語言的教材。
作者簡介
Bruce Eckel 《Thinking in C++》(C++編程思想)作者,該書曾獲1995年Software Development Jolt Award最佳書籍大獎。Eckel有20年專業(yè)編程經(jīng)驗,并自1986年起教育人們?nèi)绾巫珜懨嫦驅(qū)ο蟪绦?,足跡遍及全球,成為一位知名的C++教師和顧問,如今兼涉Java。他是C++標(biāo)準(zhǔn)委
書籍目錄
出版者的話 III
專家指導(dǎo)委員會 V
讀者回應(yīng) VI
關(guān)于《Thinking in C++》 VIII
題獻(xiàn) XIV
譯序 XV
Java環(huán)境設(shè)定 XIX
綜覽 XXI
序言 1
第2版序 3
Java 2 4
書附光盤 5
簡介 6
閱讀門檻 6
學(xué)習(xí)Java 6
目標(biāo) 7
在線說明文檔(Online documentation) 8
章節(jié)組織 8
習(xí)題 13
多媒體光盤(Multimedia CD ROM) 13
源代碼(Source code) 14
編碼標(biāo)準(zhǔn)(Coding standards) 15
Java版本 15
培訓(xùn)課程與顧問指導(dǎo) 16
關(guān)于錯誤 16
封面故事 16
致謝 17
Internet上的貢獻(xiàn)者 19
第1章 對象導(dǎo)論 20
抽象化的過程 20
每個對象都有接口 22
被隱藏的實現(xiàn)細(xì)節(jié) 24
重復(fù)運用實現(xiàn)碼 25
繼承:重復(fù)運用接口 26
是一個(is-a)vs. 像是一個(is-like-a) 29
隨多態(tài)而生的可互換對象 30
抽象基類與接口 33
對象的形貌與壽命 33
群集和迭代器 34
單根繼承體系 36
群集類庫及其易用性支持 37
管家面臨的兩難:誰該負(fù)責(zé)清理? 38
異常處理:面對錯誤的發(fā)生 39
多線程 39
持久性 40
Java與Internet(網(wǎng)際網(wǎng)、互聯(lián)網(wǎng)) 41
Web是什么? 41
客戶端程序開發(fā) 42
服務(wù)端程序開發(fā) 47
另一個截然不同的戰(zhàn)場:
應(yīng)用系統(tǒng) 48
分析與設(shè)計 48
階段0:策劃 50
階段1:建立什么? 51
階段2:如何建立? 53
階段3:打造核心 56
階段4:use cases的迭代 57
階段5:演化 58
取得成功 59
Extreme programming(XP) 59
測試優(yōu)先 60
搭檔設(shè)計 61
Java為什么成功 62
易于表達(dá)、易于理解的系統(tǒng) 62
通過程序庫(libraries)發(fā)揮
最大杠桿效應(yīng) 62
錯誤處理 62
大型程序設(shè)計 62
過渡策略 63
實踐準(zhǔn)則 63
管理上的障礙 64
Java vs. C++? 66
摘要 67
第2章 萬事萬物皆對象 69
Reference是操控對象之鑰匙 69
所有對象都必須由你建立 70
存儲在哪里 70
特例:基本型別(primitive types) 71
Java中的數(shù)組(array) 73
你再也不需要摧毀對象 73
生存空間(Scoping) 74
對象的生存空間 74
建立新的數(shù)據(jù)型別:class 75
數(shù)據(jù)成員(fields)和
函數(shù)(methods) 76
函數(shù)(methods),引數(shù)(arguments),
返回值(return values) 77
引數(shù)列(The argument list) 78
打造一個 Java 程序 79
名稱的可視性(Name visibility) 79
使用其他組件(Component) 80
關(guān)鍵字static 81
初試啼聲:你的第一個 Java程序 82
編譯與執(zhí)行
(Compiling and running) 84
注解及內(nèi)嵌式文檔 85
寓文檔于注解 85
語法 86
內(nèi)嵌的 HTML 86
@see:參考其他classes 87
Class(類)文檔所用的標(biāo)簽 87
Variable(變量)文檔所用的標(biāo)簽 88
Method(函數(shù))文檔所用的標(biāo)簽 88
文檔制作示例 89
編碼風(fēng)格(Coding style) 90
摘要 90
練習(xí) 90
第3章 控制程序流程 92
使用Java運算符(operators) 92
優(yōu)先序(Precedence) 92
賦值、指派(Assignment) 93
數(shù)學(xué)運算符
(Mathematical operators) 95
遞增(increment)和遞減
(decrement) 97
關(guān)系運算符(Relational operators) 98
邏輯運算符(Logical operators) 99
位運算符(Bitwise operators) 102
位移運算符(Shift operators) 102
if-else 三元運算符(Ternary if-else operator) 106
逗號運算符(comma operator) 107
應(yīng)用于String身上的operator + 107
使用運算符時的常犯錯誤 107
轉(zhuǎn)型運算符(Casting operators) 108
Java 沒有“sizeof” 運算符 110
再探優(yōu)先序(Precedence) 111
運算符綜合說明 111
流程控制 120
true 和 false 120
if-else 120
return 121
迭代(iteration) 121
do-while 122
for 122
break 和 continue 124
switch 129
摘要 133
練習(xí) 133
第4章 初始化和清理 134
以構(gòu)造函數(shù)(constructor)確保
初始化的進(jìn)行 134
函數(shù)重載(method overloading) 136
區(qū)分重載函數(shù) 138
搭配基本型別(Primitives)
進(jìn)行重載 138
以返回值(return value)作為重載
的基準(zhǔn) 142
Default構(gòu)造函數(shù) 142
關(guān)鍵字this 143
清理(Cleanup):終結(jié)(finalization)
與垃圾回收(garbage collection) 146
finalize( ) 存在是為了什么? 147
你必須執(zhí)行清理(cleanup)動作 147
死亡條件(The death condition) 150
垃圾回收器(garbage collector)
的運作方式 152
成員初始化(Member initialization) 154
指定初值 156
以構(gòu)造函數(shù)(Constructor)進(jìn)行
初始化動作 157
Array 的初始化 163
多維(Multidimensional)arrays 167
摘要 169
練習(xí) 170
第5章 隱藏實現(xiàn)細(xì)目 172
package: 程序庫單元(Library unit) 172
獨一無二的package 命名 174
自訂一個程序庫 177
利用 imports 來改變行為 178
使用package時的一些忠告 180
Java訪問權(quán)限飾詞(access specifiers) 180
“Friendly”(友善的) 180
public: 接口訪問(interface access) 181
private: 不要碰我! 183
protected: 幾分友善 184
Interface(接口)與implementation
(實現(xiàn)) 185
Class的訪問權(quán)限 186
摘要 189
練習(xí) 190
第6章 重復(fù)運用Classes 192
組合(Composition)語法 192
繼承(Inheritance)語法 195
base class的初始化 197
兼容組合(composition)及繼承(inheritance) 199
保證適當(dāng)清理 200
名稱遮蔽(Name hiding) 203
組合與繼承之間的抉擇 204
protected(受保護(hù)的) 205
漸進(jìn)式開發(fā)
(Incremental derelopment) 206
向上轉(zhuǎn)型(Upcasting) 207
為什么需要向上轉(zhuǎn)型
(Why“upcasting”)? 207
關(guān)鍵字final 208
Final data 209
Final methods 212
Final classes 214
最后的告誡 215
初始化以及class 的裝載 215
繼承與初始化 216
摘要 217
練習(xí) 218
第7章 多態(tài) 220
再探向上轉(zhuǎn)型(Upcasting) 220
將對象的型別忘掉 221
竅門 223
Method-call(函數(shù)調(diào)用)綁定方式 223
產(chǎn)生正確的行為 224
擴(kuò)充性(Extensibility) 226
覆寫(overriding)vs. 重載
(overloading) 229
Abstract classes(抽象類)和abstract methods(抽象函數(shù)) 230
構(gòu)造函數(shù)(Constructors)和
多態(tài)(polymorphism) 234
構(gòu)造函數(shù)調(diào)用順序
(order of constructor calls) 234
繼承與finalize( ) 236
polymorphic methods
在構(gòu)造函數(shù)中的行為 239
將繼承(inheritance)運用于設(shè)計 241
純粹繼承(Pure inheritance)
vs. 擴(kuò)充(extension) 242
向下轉(zhuǎn)型(downcasting)與執(zhí)行期型別
辨識(run-time type identification) 243
摘要 245
練習(xí) 246
第8章 接口與內(nèi)隱類 248
Interfaces(接口) 248
Java的多重繼承
(multiple inheritance in Java) 251
通過繼承來擴(kuò)充interface 254
產(chǎn)生常量群(grouping constants) 255
將interfaces內(nèi)的數(shù)據(jù)成員初始化 256
嵌套的(nesting)interfaces 257
Inner classes(內(nèi)隱類) 260
Inner classes(內(nèi)隱類)與
upcasting(向上轉(zhuǎn)型) 261
位于methods 和scopes之內(nèi)的
inner classes(內(nèi)隱類) 263
匿名的
(anonymous)inner classes 265
與外圍(outer)class的連接關(guān)系 268
static inner classes(靜態(tài)內(nèi)隱類) 270
取用(referring)outer class的對象 272
從多層嵌套class向外伸展觸角 273
繼承inner classes 273
inner classes可被覆寫
(overridden)嗎? 274
Inner class的標(biāo)識符(identifiers) 276
為什么需要inner classes? 277
Inner classes和control frameworks 281
摘要 287
練習(xí) 287
第9章 持有你的對象 291
Arrays(數(shù)組) 291
Arrays是第一級對象
(first-class objects) 292
返回一個array 295
Arrays class 297
array的充填(filling) 306
array的復(fù)制 307
arrays的比較 308
array元素的比較 309
array的排序 312
在已排序的array中進(jìn)行查找 313
array總結(jié) 315
容器(containers)簡介 315
容器的打印 316
容器的充填 317
容器的缺點:元素型別未定 323
有時候它總是可以運作 325
制作一個具有型別意識(type-conscious)
的ArrayList 326
迭代器(Iterators) 327
容器分類學(xué)(Container taxonomy) 330
Collection的機(jī)能 333
List的機(jī)能 335
根據(jù)LinkedList制作一個stack 338
根據(jù)LinkedList制作一個queue 339
Set的機(jī)能 340
SortedSet 342
Map的機(jī)能 343
SortedMap 346
Hashing和hash codes 347
覆寫hashCode( ) 354
持有references 356
WeakHashMap 358
再論Iterators(迭代器) 360
選擇一份適當(dāng)?shù)膶崿F(xiàn)品 361
在各種Lists之間抉擇 361
在各種Sets之間抉擇 364
在各種Maps之間抉擇 366
Lists的排序和查找 368
公用函數(shù)(Utilities) 369
讓Collection或Map無法被更改 369
Collection或Map的同步控制 370
未獲支持的操作
(Unsupported operations) 371
Java 1.0/1.1的容器 373
Vector和Enumeration 374
Hashtable 375
Stack 375
BitSet 376
摘要 377
練習(xí) 378
第10章 通過異常處理錯誤 382
基本異常 383
異常引數(shù)(Exception arguments) 383
異常的捕捉(Catching) 384
try block 384
異常處理函數(shù)(Exception handlers) 385
編寫你自己的異常類 386
異常規(guī)格(exception specification) 389
捕捉所有異常 390
重擲(Rethrowing)異常 392
Java標(biāo)準(zhǔn)異常 395
RuntimeException的特殊情況 395
以finally進(jìn)行清理(cleanup) 397
為什么需要finally? 398
缺憾:異常遺失(the lose exception) 400
異常的局限性(Exception restrictions) 401
構(gòu)造函數(shù)(Constructor) 404
異常的比對(matching) 407
異常的使用原則
(Exception guidelines) 408
摘要 409
練習(xí) 409
第11章 Java I/O 系統(tǒng) 412
File class 412
目錄列示器(a directory lister) 412
目錄的檢查和建立 416
輸入(Input)和輸出(Output) 418
InputStream的類型 418
OutputStream的類型 419
附加屬性(attributes)和有用接口 420
通過FilterInputStream自InputStream
讀取數(shù)據(jù) 421
通過FilterOutputStream將數(shù)據(jù)寫入OutputStream 421
Readers和Writers 422
數(shù)據(jù)的來源(sources)和
去處(sinks) 423
改變stream的行為 424
未曾有任何變化的classes 425
RandomAccessFile 425
I/O streams的典型運用 426
Input streams 428
Output streams 430
這是個臭蟲嗎? 431
管線化的(piped)streams 432
標(biāo)準(zhǔn)I/O 432
讀取標(biāo)準(zhǔn)輸入 432
將System.out轉(zhuǎn)換為PrintWriter 433
標(biāo)準(zhǔn)I/O重導(dǎo)向(Redirecting) 434
壓縮 435
運用GZIP進(jìn)行單純壓縮 435
運用Zip存儲多份文件數(shù)據(jù) 436
Java ARchives (JARs) 438
對象次第讀寫(Object serialization) 440
找出class 444
控制次第讀寫(serialization) 445
使用對象持久機(jī)制(persistence) 453
被語匯單元化(Tokenizing)的
輸入動作 459
StreamTokenizer 459
StringTokenizer 462
檢驗大小寫 464
摘要 471
練習(xí) 472
第12章 執(zhí)行期型別辨識 474
為什么需要RTTI 474
Class 對象 476
轉(zhuǎn)型之前先檢查 478
RTTI語法 485
Reflection(映像):執(zhí)行期的類信息
(run-time class information) 487
實現(xiàn)一個函數(shù)提取器(extractor) 489
摘要 493
練習(xí) 494
第13章 制作窗口和applet 496
基本的applet 498
applet的束縛(restrictions) 498
applet的優(yōu)點 498
應(yīng)用程序框架
(Application frameworks) 499
在Web瀏覽器上執(zhí)行applets 500
運用Appletviewer 501
測試applets 502
從命令行(Command line)
執(zhí)行applets 503
一個顯示框架
(Adisplay framework) 504
運用Windows Explorer 507
制作一個按鈕 507
捕捉一個事件(Capturing an event) 508
文本區(qū)(Text areas) 511
控制版面布局(Controlling layout) 512
BorderLayout 513
FlowLayout 514
GridLayout 514
GridBagLayout 515
絕對定位 515
BoxLayout 515
最好的方法是什么? 519
Swing的事件模型(event model) 519
事件(event)及監(jiān)聽器(listener)
的種類 520
追蹤多種事件 525
Swing組件一覽 528
按鈕(Buttons) 528
圖示(Icons) 531
工具提示(Tool tips) 533
文本塊(Text fields) 533
邊框(Borders) 535
JScrollPanes 536
迷你文本編輯器(mini-editor) 538
復(fù)選框(Check boxes) 539
單選按鈕(Radio buttons) 540
組合框Combo boxes(下拉式列表
drop-down lists) 541
列表框(List boxes) 542
頁簽式嵌板(Tabbed panes) 544
消息框(Message boxes) 545
菜單(Menus) 547
彈出式菜單(Pop-up menus) 552
繪圖(Drawing) 553
對話框(Dialog Boxes) 556
文件對話框(File dialogs) 560
Swing 組件上的HTML 562
滑塊(Sliders)和進(jìn)度指示器
(progress bars) 562
樹狀組件(Trees) 563
表格(Tables) 566
選擇外觀風(fēng)格
(Selecting Look & Feel) 567
剪貼板(clipboard) 569
將applet封裝于JAR文件 572
編程技術(shù) 572
動態(tài)綁定事件
(Binding events dynamically) 573
將business logic和用戶界面
logic隔離 574
標(biāo)準(zhǔn)型式 577
視覺化程序設(shè)計(Visual programming)
與Beans 577
什么是Bean? 578
運用Introspector提取出BeanInfo 580
一個更為復(fù)雜精巧的Bean 585
Bean的包裝(Packaging a Bean) 588
Bean所支持的更復(fù)雜功能 590
其他 590
摘要 591
練習(xí) 591
第14章 多線程 594
反應(yīng)靈敏的用戶界面 594
繼承自Thread 596
運用線程打造出反應(yīng)靈敏的
用戶界面 598
結(jié)合線程和程序主類 600
產(chǎn)生多個線程 602
Daemon線程 604
共享有限資源 606
不當(dāng)?shù)馁Y源訪問 606
Java如何共享資源 610
再探JavaBeans 614
停滯(阻塞,Blocking) 618
轉(zhuǎn)為停滯狀態(tài)(Becoming blocked) 619
死鎖(Deadlock) 628
優(yōu)先權(quán)(Priorities) 632
優(yōu)先權(quán)的讀取和設(shè)定 632
線程群組(Thread groups) 636
再探Runnable 642
過多的線程 645
摘要 647
練習(xí) 649
第15章 分布式計算 651
網(wǎng)絡(luò)編程 652
機(jī)器的識別 652
Sockets(插座) 655
服務(wù)多個客戶 660
數(shù)據(jù)元(Datagrams) 665
在applet中使用URL 665
更多的網(wǎng)絡(luò)相關(guān)信息 667
JDBC,Java數(shù)據(jù)庫連接機(jī)制 668
讓本節(jié)示例正常運作 670
一個GUI版的查詢程序 673
為什么JDBC API看起來如此復(fù)雜 676
一個更復(fù)雜的示例 676
Servlets 683
Servlet基本教練 684
Servlets和多線程(multithreading) 687
以servlets處理sessions 688
執(zhí)行servlet示例程序 691
Java Server Pages(JSP) 692
隱式對象(Implicit objects) 693
JSP指令(directives) 693
JSP的腳本描述成分
(scripting elements) 694
取出字段(fields)和數(shù)值(values) 696
JSP的頁面屬性(page attributes)和
有效范圍(scope) 697
處理JSP中的sessions 698
產(chǎn)生并修改cookies 699
JSP摘要 700
RMI (Remote Method Invocation,
遠(yuǎn)端函數(shù)調(diào)用) 701
遠(yuǎn)端接口(Remote interfaces) 701
實現(xiàn)出遠(yuǎn)端接口(remote interface) 702
產(chǎn)生stubs和skeletons 704
使用遠(yuǎn)端對象(remote object) 705
CORBA 706
CORBA的基本原理 706
一個示例 708
Java Applets和CORBA 712
CORBA vs. RMI 712
Enterprise(企業(yè)級)JavaBeans 713
JavaBeans vs. EJBs 714
EJB規(guī)格 714
EJB組件 714
EJB組件成分 715
EJB的各項操作 716
EJBs的類型 717
分發(fā)(Developing)EJB 718
EJB 摘要 722
Jini: 分布式服務(wù)(distributed serrices) 722
Jini的來龍去脈 722
什么是Jini? 723
Jini如何運作 723
discovery動作 724
join動作 724
lookup動作 725
接口和實現(xiàn)的分離 725
將分布式系統(tǒng)抽象化 726
摘要 726
練習(xí) 727
附錄A 對象的傳遞和返回 729
reference的傳遞 729
別名(Aliasing) 730
制作一個局域性副本(local copies) 731
Pass by value(傳值) 732
對象的克?。–loning objects) 733
賦予class克隆能力(cloneability) 734
成功的克隆 736
Object.clone( ) 的效應(yīng) 738
克隆一個組合對象
(composed object) 739
對ArrayList進(jìn)行深層拷貝 741
通過serialization進(jìn)行深層拷貝 743
將克隆能力加到繼承體系的更下層 745
為什么要有這種奇怪的設(shè)計? 746
克隆能力(cloneability)的控制 746
copy構(gòu)造函數(shù) 750
唯讀類(Read-only classes) 754
編寫一個唯讀類(read-only classes) 755
恒常性(immutability)的缺點 756
恒常不變的Strings 758
String和StringBuffer 760
Strings是特殊的東西 763
摘要 763
練習(xí) 764
附錄B Java原生接口 765
原生函數(shù)(Native method)的調(diào)用 765
頭文件產(chǎn)生器:javah 766
名稱重整(Name mangling)與函數(shù)
標(biāo)記(function signatures) 767
實現(xiàn)出你自己的DLL 767
取用JNI函數(shù): 通過JNIEnv引數(shù) 768
訪問Java Strings 769
傳遞和運用Java對象 769
JNI和Java異常 771
JNI和多線程(threading) 772
使用既有的程序代碼 772
補(bǔ)充信息 773
附錄C Java編程準(zhǔn)則 774
設(shè)計 774
實現(xiàn)(Implementation) 778
附錄D 資源 783
軟件 783
書籍 783
分析& 設(shè)計 784
Python 786
我的著作 786
索引 788
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載