侃侃Thinking In Java

对于大学生,yqj2065不推荐Thinking In Java 。我在课上说过它,因此我的学生应该不会去看这本书。


我是从Bruce Eckel的网站开始,读Thinking In Java(TIJ) 1st edition的,那是2000年左右。实话实说,对于TIJ,我又喜欢又讨厌它。

又喜欢又讨厌

正如大多数同学所感觉的,TIJ偏重于介绍面向对象的“思想”,而不是像绝大多数(国内的)《Xxx程序设计》之类的书籍,前者是思想流派,后者是语法流。这点很吸引我,而且,这也是我写《编程导论(Java)》时学习的地方。

但,我并没有完整地读完TIJ,因为

  • 我不喜欢他的讲述方式。Bruce Eckel按照上课的方式安排内容,“在我思考书中的一章时,实际上是在想如何教好一堂课。我的目标是得到一系列规模适中的教学模块,可以在合理的时间内教完。”,而我个人的阅读习惯是,以内容的适当集中来看待一个章节。当然,这只是不关紧要的对TIJ的第一印象。我会以内容为主线,跳着阅读一些章节——因而我也就没有完整地读完它。
  • 我发现他所宣扬的面向对象“思想”,并不能够让我信服。注意,并非Bruce Eckel讲的东西有多大的错误,而是他的“思想”并不完整和系统。所以,在很早(2005)的一篇博客中,我说:“其实,你把Timothy A.Budd..面向对象程序设计(第3版)再加上垃圾堆中顺便一本Java书,捣鼓捣鼓,就可以达到《Thinking in Java》的程度。”那时,我不看TIJ已经很久了。
  • TIJ中有许多我认为不正确或严谨的地方。
  • 太厚了。书,我没有买的欲望,也不想借一本回家看。

再读一遍?

TIJ受到很多人的推崇,我实在不知道什么原因。或许国内的教材都是讲语法,使得人们遇到一本“思想流派”的书,就觉得好?

我打算比较一下《编程导论(Java)》,才决定再看看(并下载)Java编程思想《Thinking In Java》中文版 (第4版).pdf。我的笔记将列举在下面。(先将目录拷贝过来,很多与《编程导论(Java)》无交集的章节——如API编程部分,可能不会仔细读)

7月5号20:36发表本文,到现在7.7:0:30,写了6章的笔记,累了。

目前评价:原文 ★★☆☆☆  翻译☆☆☆☆

  • 读TIJ -1 对象入门
  • 读TIJ -2 一切都是对象
  • 读TIJ -3 控制程序流程
  • 读TIJ -4 初始化和清除
  • 读TIJ -5 隐藏实施过程
  • 读TIJ -6 类再生
  • 读TIJ -7 多形性

  • 第 8 章对象的容纳 .................209
    8.1 数组...................209
    8.1.1 数组和第一类对象............ 209
    8.1.2 数组的返回............. 212
    8.2 集合...................213
    8.2.1 缺点:类型未知................. 213
    8.3 枚举器(反复器) ..................217
    8.4 集合的类型...................220
    8.4.1 Vector...................... 220
    8.4.2 BitSet....................... 221
    8.4.3 Stack ........................ 222
    8.4.4 Hashtable.................223
    8.4.5 再论枚举器............. 228
    21
    8.5 排序...................229
    8.6 通用集合库...................232
    8.7 新集合...............233
    8.7.1 使用Collections................. 235
    8.7.2 使用Lists................ 238
    8.7.3 使用Sets ................. 242
    8.7.4 使用Maps............... 244
    8.7.5 决定实施方案..................... 247
    8.7.6 未支持的操作..................... 253
    8.7.7 排序和搜索............. 255
    8.7.8 实用工具................. 259
    8.8 总结...................261
    8.9 练习...................262
    第 9 章违例差错控制 ............263
    9.1 基本违例.......................263
    9.1.1 违例自变量............. 264
    9.2 违例的捕获...................264
    9.2.1 try 块........................ 264
    9.2.2 违例控制器............. 265
    9.2.3 违例规范................. 265
    9.2.4 捕获所有违例..................... 266
    9.2.5 重新“掷”出违例............ 267
    9.3 标准 Java 违例............. 270
    9.3.1 RuntimeException 的特殊情况................. 270
    9.4 创建自己的违例.......................271
    9.5 违例的限制...................274
    9.6 用finally 清除..............276
    9.6.1 用finally 做什么................ 277
    9.6.2 缺点:丢失的违例............ 279
    9.7 构建器...............280
    9.8 违例匹配.......................283
    9.8.1 违例准则................. 284
    9.9 总结...................284
    9.10 练习.................284
    第 10 章JAVA IO 系统.......................285
    10.1 输入和输出.................285
    10.1.1 InputStream的类型...................... 285
    10.1.2 OutputStream的类型................... 286
    10.2 增添属性和有用的接口....................286
    10.2.1 通过FilterInputStream 从InputStream里读入数据.................. 287
    10.2.2 通过FilterOutputStream 向OutputStream 里写入数据............ 287
    10.3 本身的缺陷:RandomAccessFile.................288
    10.4 File 类.............288
    10.4.1 目录列表器....................... 288
    10.4.2 检查与创建目录...............292
    10.5 IO 流的典型应用....................294
    10.5.1 输入流................... 296
    10.5.2 输出流................... 298
    10.5.3 快捷文件处理................... 298
    10.5.4 从标准输入中读取数据............... 300
    10.5.5 管道数据流....................... 300
    10.6 StreamTokenizer......................300
    22
    10.6.1 StringTokenizer ................ 303
    10.7 Java 1.1 的IO 流....................305
    10.7.1 数据的发起与接收.......... 305
    10.7.2 修改数据流的行为.......... 306
    10.7.3 未改变的类....................... 306
    10.7.4 一个例子............... 307
    10.7.5 重导向标准IO.................. 310
    10.8 压缩.................311
    10.8.1 用GZIP 进行简单压缩................ 311
    10.8.2 用Zip 进行多文件保存............... 312
    10.8.3 Java 归档(jar)实用程序.......... 314
    10.9 对象序列化.................315
    10.9.1 寻找类................... 318
    10.9.2 序列化的控制................... 319
    10.9.3 利用“持久性”...............326
    10.10 总结...............332
    10.11 练习...............332
    第 11 章运行期类型鉴定...................333
    11.1 对RTTI 的需要.......................333
    11.1.1 Class 对象............. 334
    11.1.2 造型前的检查................... 337
    11.2 RTTI 语法....................342
    11.3 反射:运行期类信息............343
    11.3.1 一个类方法提取器.......... 344
    11.4 总结.................347
    11.5 练习.................348
    第 12 章传递和返回对象...................349
    12.1 传递句柄.....................349
    12.1.1 别名问题............... 349
    12.2 制作本地副本............351
    12.2.1 按值传递............... 351
    12.2.2 克隆对象............... 352
    12.2.3 使类具有克隆能力.......... 353
    12.2.4 成功的克隆....................... 353
    12.2.5 Object.clone()的效果................... 355
    12.2.6 克隆合成对象................... 356
    12.2.7 用Vector 进行深层复制.............. 358
    12.2.8 通过序列化进行深层复制.......... 359
    12.2.9 使克隆具有更大的深度............... 361
    12.2.10 为什么有这个奇怪的设计..................... 362
    12.3 克隆的控制.................363
    12.3.1 副本构建器....................... 366
    12.4 只读类............369
    12.4.1 创建只读类....................... 370
    12.4.2 “一成不变”的弊端................... 371
    12.4.3 不变字串............... 373
    12.4.4 String 和StringBuffer 类............. 374
    12.4.5 字串的特殊性................... 376
    12.5 总结.................376
    12.6 练习.................376
    第十三 章创建窗口和程序片 ............378
    13.1 为何要用AWT ?....................378
    23
    13.2 基本程序片.................379
    13.2.1 程序片的测试................... 380
    13.2.2 一个更图形化的例子................... 381
    13.2.3 框架方法的演示...............381
    13.3 制作按钮.....................382
    13.4 捕获事件.....................382
    13.5 文本字段.....................384
    13.6 文本区域.....................385
    13.7 标签.................386
    13.8 复选框............387
    13.9 单选钮............388
    13.10 下拉列表...................389
    13.11 列表框.......................390
    13.11.1 handleEvent() .................. 391
    13.12 布局的控制..............393
    13.12.1 FlowLayout..................... 393
    13.12.2 BorderLayout .................. 393
    13.12.3 GridLayout...................... 394
    13.12.4 CardLayout...................... 394
    13.12.5 GridBagLayout...............396
    13.13 action 的替代品....................396
    13.14 程序片的局限.......................400
    13.14.1 程序片的优点................. 401
    13.15 视窗化应用..............401
    13.15.1 菜单..................... 401
    13.15.2 对话框................. 404
    13.16 新型AWT .................. 408
    13.16.1 新的事件模型................. 409
    13.16.2 事件和接收者类型..................... 410
    13.16.3 用Java 1.1 AWT制作窗口和程序片............... 414
    13.16.4 再研究一下以前的例子............ 416
    13.16.5 动态绑定事件................. 431
    13.16.6 将事务逻辑与UI 逻辑区分开.............. 433
    13.16.7 推荐编码方法................. 435
    13.17 Java 1.1 用户接口API.....................448
    13.17.1 桌面颜色............ 448
    13.17.2 打印..................... 448
    13.17.3 剪贴板................. 454
    13.18 可视编程和Beans...............456
    13.18.1 什么是Bean.................... 457
    13.18.2 用Introspector 提取BeanInfo............... 458
    13.18.3 一个更复杂的Bean ................... 463
    13.18.4 Bean 的封装.................... 465
    13.18.5 更复杂的Bean 支持................... 466
    13.18.6 Bean 更多的知识........... 466
    13.19 Swing 入门(注释⑦)....................467
    13.19.1 Swing 有哪些优点...................... 467
    13.19.2 方便的转换..................... 467
    13.19.3 显示框架............ 468
    13.19.4 工具提示............ 469
    13.19.5 边框..................... 469
    13.19.6 按钮..................... 470
    13.19.7 按钮组................. 471
    24
    13.19.8 图标..................... 472
    13.19.9 菜单..................... 474
    13.19.10 弹出式菜单................... 477
    13.19.11 列表框和组合框.......... 479
    13.19.12 滑杆和进度指示条................... 479
    13.19.13 树....................... 480
    13.19.14 表格................... 482
    13.19.15 卡片式对话框.............. 483
    13.19.16 Swing 消息框...............485
    13.19.17 Swing 更多的知识.................... 485
    13.20 总结...............485
    13.21 练习...............486
    第 14 章多线程 .......................487
    14.1 反应灵敏的用户界面............487
    14.1.1 从线程继承....................... 489
    14.1.2 针对用户界面的多线程............... 490
    14.1.3 用主类合并线程...............493
    14.1.4 制作多个线程................... 495
    14.1.5 Daemon 线程.................... 498
    14.2 共享有限的资源.....................499
    14.2.1 资源访问的错误方法................... 499
    14.2.2 Java 如何共享资源.......... 503
    14.2.3 回顾Java Beans ...............506
    14.3 堵塞.................510
    14.3.1 为何会堵塞....................... 510
    14.3.2 死锁....................... 518
    14.4 优先级............521
    14.4.1 线程组................... 525
    14.5 回顾runnable............. 530
    14.5.1 过多的线程....................... 532
    14.6 总结.................535
    14.7 练习.................535
    第 15 章网络编程...................537
    15.1 机器的标识.................537
    15.1.1 服务器和客户机...............538
    15.1.2 端口:机器内独一无二的场所.............. 539
    15.2 套接字............539
    15.2.1 一个简单的服务器和客户机程序.......... 539
    15.3 服务多个客户............543
    15.4 数据报............547
    15.5 一个Web 应用...........551
    15.5.1 服务器应用....................... 552
    15.5.2 NameSender程序片..................... 556
    15.5.3 要注意的问题................... 560
    15.6 Java 与CGI 的沟通...............560
    15.6.1 CGI 数据的编码...............561
    15.6.2 程序片................... 562
    15.6.3 用C++写的CGI 程序.................. 566
    15.6.4 POST 的概念.................... 573
    15.7 用JDBC 连接数据库............576
    15.7.1 让示例运行起来...............578
    15.7.2 查找程序的GUI 版本.................. 580
    25
    15.7.3 JDBC API 为何如何复杂............ 582
    15.8 远程方法.....................582
    15.8.1 远程接口概念................... 582
    15.8.2 远程接口的实施...............583
    15.8.3 创建根与干....................... 585
    15.8.4 使用远程对象................... 585
    15.8.5 RMI 的替选方案.............. 586
    15.9 总结.................586
    15.10 练习...............586
    第 16 章设计范式...................588
    16.1.1 单子....................... 588
    16.1.2 范式分类............... 589
    16.2 观察器范式.................590
    16.3 模拟垃圾回收站.....................592
    16.4 改进设计.....................595
    16.4.1 “制作更多的对象” ................... 595
    16.4.2 用于原型创建的一个范式.......... 597
    16.5 抽象的应用.................604
    16.6 多重派遣.....................607
    16.6.1 实现双重派遣................... 607
    16.7 访问器范式.................612
    16.8 RTTI 真的有害吗....................618
    16.9 总结.................620
    16.10 练习...............621
    第 17 章项 目 ..............622
    17.1 文字处理.....................622
    17.1.1 提取代码列表................... 622
    17.1.2 检查大小写样式...............633
    17.2 方法查找工具............639
    17.3 复杂性理论.................643
    17.4 总结.................649
    17.5 练习.................649
    附 录 A 使用非JAVA 代码...............650
    A.1 Java 固有接口............. 650
    A.1.1 调用固有方法.................... 650
    A.1.2 访问JNI 函数:JNIEnv 自变量............... 652
    A.1.3 传递和使用Java 对象................... 653
    A.1.4 JNI 和Java 异常................ 654
    A.1.5 JNI 和线程处理................. 655
    A.1.6 使用现成代码.................... 655
    A.2 微软的解决方案......................655
    A.3 J/Direct.............655
    A.3.1 @dll.import 引导命令................... 656
    A.3.2 com.ms.win32 包...............657
    A.3.3 汇集............ 658
    A.3.4 编写回调函数....................659
    A.3.5 其他J/Direct 特性............. 659
    A.4 本原接口(RNI)....................660
    A.4.1 RNI 总结................ 661
    A.5 Java/COM 集成...........661
    A.5.1 COM 基础.............. 662
    A.5.2 MS Java/COM 集成.......... 663
    26
    A.5.3 用Java 设计COM 服务器........... 663
    A.5.4 用Java 设计COM 客户................ 665
    A.5.5 ActiveX/Beans 集成.......... 666
    A.5.6 固有方法与程序片的注意事项................ 666
    A.6 CORBA .............666
    A.6.1 CORBA 基础..................... 666
    A.6.2 一个例子................ 667
    A.6.3 Java 程序片和CORBA................. 671
    A.6.4 比较CORBA 与RMI ................... 671
    A.7 总结...................671
    附 录B 对比C++和JAVA..................672
    附 录 C JAVA编程规则.......................677
    附 录 D 性能................679
    D.1 基本方法......................679
    D.2 寻找瓶颈......................679
    D.2.1 安插自己的测试代码.................... 679
    D.2.2 JDK 性能评测[2]...............679
    D.2.3 特殊工具................ 680
    D.2.4 性能评测的技巧................ 680
    D.3 提速方法......................680
    D.3.1 常规手段................ 680
    D.3.2 依赖语言的方法................ 680
    D.3.3 特殊情况................ 681
    D.4 参考资源......................682
    D.4.1 性能工具................ 682
    D.4.2 Web 站点............... 682
    D.4.3 文章............ 682
    D.4.4 Java 专业书籍.................... 683
    D.4.5 一般书籍................ 683
    附 录 E 关于垃圾收集的一些话.....................684
    附 录 F 推荐读物.....................686



  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值