《Java程序设计概念 对象先行 原书第8版》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:(美)凯·霍斯特曼著;林琪,肖斌等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2018
  • ISBN:9787111593669
  • 页数:622 页
图书介绍:这是一本关于Java和计算机编程的入门教材,书中重点关注基础知识,并强调如何有效地学习。本书共分三部分。第一部分(第1~7章)是基础知识,首先简要介绍了计算机科学和Java编程,展示了如何管理预定义的类以及如何根据给定的规范定义类,之后讲解了基本数据类型、分支、循环和数组;第二部分(第8~12章)讲解面向对象设计,包括类的设计、继承和多态、接口、异常处理和基本文件输入/输出,以及两个重要的案例研究;第三部分是在线内容,讲解了数据结构与算法,具体包括递归、排序和查找、链表、集合、映射、栈和队列。本书非常适合作为计算机科学家、工程师和其他学科学生的第一本编程教材。

第一部分 基础知识 2

第1章 引言 2

1.1 计算机程序 2

1.2 计算机剖析 3

计算与社会1.1 计算机无处不在 4

1.3 Java编程语言 5

1.4 熟悉你的编程环境 7

编程技巧1.1 备份副本 10

1.5 分析你的第一个程序 10

常见错误1.1 缺少分号 13

1.6 错误 14

常见错误1.2 单词拼写错误 15

1.7 解决问题:算法设计 15

1.7.1 算法概念 16

1.7.2 解决一个投资问题的算法 16

1.7.3 伪代码 17

1.7.4 从算法到程序 18

操作指南1.1 用伪代码描述算法 19

实用示例1.1 编写一个铺地板瓷砖的算法 21

第2章 使用对象 31

2.1 对象和类 31

2.1.1 使用对象 32

2.1.2 类 32

2.2 变量 33

2.2.1 变量声明 33

2.2.2 类型 35

2.2.3 名 35

2.2.4 注释 36

2.2.5 赋值 37

常见错误2.1 使用未声明或未初始化的变量 39

常见错误2.2 混淆变量声明和赋值语句 39

编程技巧2.1 选择描述性的变量名 39

2.3 调用方法 40

2.3.1 类的公共接口 40

2.3.2 方法参数 40

2.3.3 返回值 42

2.3.4 方法声明 43

编程技巧2.2 通过尝试来学习 44

2.4 构造对象 45

常见错误2.3 试图如调用方法一样调用构造函数 47

2.5 访问器和修改器方法 47

2.6 API文档 48

2.6.1 浏览API文档 49

2.6.2 包 50

编程技巧2.3 不要强记,使用在线帮助 51

2.7 实现一个测试程序 51

专题2.1 在交互环境中测试类 51

实用示例2.1 你活了多少天? 53

实用示例2.2 处理图片 54

2.8 对象引用 54

计算与社会2.1 计算机垄断 57

2.9 图形应用 57

2.9.1 帧窗口 58

2.9.2 在组件上绘制 59

2.9.3 在帧窗口中显示组件 61

2.10 椭圆、线、文本和颜色 62

2.10.1 椭圆和圆 63

2.10.2 线 63

2.10.3 绘制文本 64

2.10.4 颜色 64

第3章 实现类 78

3.1 实例变量和封装 78

3.1.1 实例变量 78

3.1.2 Counter类的方法 80

3.1.3 封装 80

3.2 指定类的公共接口 82

3.2.1 指定方法 82

3.2.2 指定构造函数 83

3.2.3 使用公共接口 85

3.2.4 为公共接口加注释 85

常见错误3.1 将构造函数声明为void 88

编程技巧3.1 j avadoc工具 88

3.3 提供类实现 89

3.3.1 提供实例变量 89

3.3.2 提供构造函数 89

3.3.3 提供方法 91

常见错误3.2 忽略参数变量 93

操作指南3.1 实现一个类 94

实用示例3.1 建立一个简单的菜单 97

3.4 单元测试 98

计算与社会3.1 电子投票机 99

3.5 解决问题:跟踪对象 100

3.6 局部变量 102

常见错误3.3 在局部变量中重复实例变量 103

常见错误3.4 提供不必要的实例变量 104

常见错误3.5 忘记在构造函数中初始化对象引用 105

3.7 thi s引用 105

专题3.1 从一个构造函数调用另一个构造函数 108

3.8 图形类 108

操作指南3.2 绘制图形 112

第4章 基本数据类型 127

4.1 数字 127

4.1.1 数字类型 127

4.1.2 常量 129

专题4.1 大数 134

编程技巧4.1 不要使用魔法数 134

4.2 算术运算 135

4.2.1 算术操作符 135

4.2.2 自增和自减 135

4.2.3 整除和求余 135

4.2.4 幂和平方根 136

4.2.5 浮点数转换为整数 138

常见错误4.1 意外的整除 139

常见错误4.2 小括号不匹配 140

编程技巧4.2 表达式中的空格 140

Java 8说明4.1 避免负余数 140

专题4.2 结合赋值和算术运算 141

专题4.3 实例方法和静态方法 141

计算与社会4.1 奔腾处理器的浮点数bug 141

4.3 输入和输出 143

4.3.1 读取输入 143

4.3.2 格式化输出 144

操作指南4.1 完成计算 147

实用示例4.1 计算金字塔的体积和表面积 150

4.4 解决问题:先手动完成 150

实用示例4.2 计算旅行时间 152

4.5 字符串 152

4.5.1 String类型 152

4.5.2 字符串连接 153

4.5.3 字符串输入 154

4.5.4 转义序列 154

4.5.5 字符串和字符 154

4.5.6 子串 155

编程技巧4.3 阅读异常报告 157

专题4.4 使用对话框提供输入和输出 158

计算与社会4.2 国际字母表和Unicode 158

第5章 判断 174

5.1 if语句 174

编程技巧5.1 大括号布局 177

编程技巧5.2 总是使用大括号 178

常见错误5.1 if条件后有分号 178

编程技巧5.3 制表符 178

专题5.1 条件操作符 179

编程技巧5.4 避免不同分支中重复 179

5.2 比较值 180

5.2.1 关系操作符 180

5.2.2 比较浮点数 181

5.2.3 比较字符串 182

5.2.4 比较对象 183

5.2.5 测试null 184

常见错误5.2 使用==比较字符串 185

操作指南5.1 实现一个if语句 186

实用示例5.1 抽取中间字符 188

计算与社会5.1 丹佛机场的行李处理系统 188

5.3 多个候选条件 189

专题5.2 switch语句 192

5.4 嵌套分支 193

编程技巧5.5 手动跟踪 196

常见错误5.3 空悬else问题 197

专题5.3 块作用域 198

专题5.4 枚举类型 199

5.5 解决问题:流程图 200

5.6 解决问题:选择测试用例 202

编程技巧5.6 制订计划并为意料外的问题留出时间 204

专题5.5 记录日志 205

5.7 布尔变量和操作符 205

常见错误5.4 结合多个关系操作符 208

常见错误5.5 混淆&&和||条件 209

专题5.6 布尔操作符的短路计算 209

专题5.7 德·摩根定律 210

5.8 应用:输入验证 211

计算与社会5.2 人工智能 213

第6章 循环 233

6.1 while循环 233

常见错误6.1 不要想“我们到了吗?” 239

常见错误6.2 无限循环 239

常见错误6.3 差一错误 240

6.2 解决问题:手动跟踪 241

计算与社会6.1 数字盗版 244

6.3 for循环 245

编程技巧6.1 按其预期用途使用for循环 250

编程技巧6.2 选择满足任务要求的循环边界 251

编程技巧6.3 统计迭代 251

专题6.1 for循环首部中声明的变量 252

6.4 do循环 253

编程技巧6.4 画出循环的流程图 254

6.5 应用:处理卫哨值 254

专题6.2 输入和输出重定向 257

专题6.3 “半循环”问题 258

专题6.4 break和continue语句 259

6.6 解决问题:故事板 260

6.7 常用循环算法 263

6.7.1 求和与平均值 263

6.7.2 匹配计数 263

6.7.3 找到第一个匹配 264

6.7.4 提示用户输入,直到找到匹配 265

6.7.5 最大值和最小值 265

6.7.6 比较相邻值 265

操作指南6.1 写一个循环 267

实用示例6.1 信用卡处理 270

6.8 嵌套循环 270

实用示例6.2 处理图像中的像素 273

6.9 应用:随机数和仿真 273

6.9.1 生成随机数 273

6.9.2 蒙特卡罗方法 275

6.10 使用调试器 277

操作指南6.2 调试 279

实用示例6.3 示例调试会话 281

计算与社会6.2 第一个bug 281

第7章 数组和数组列表 303

7.1 数组 303

7.1.1 声明和使用数组 303

7.1.2 数组引用 306

7.1.3 利用方法使用数组 307

7.1.4 部分填充的数组 307

常见错误7.1 边界错误 309

常见错误7.2 未初始化和未填充的数组 309

编程技巧7.1 对相关数据项的序列使用数组 309

编程技巧7.2 将并行数组重组为对象数组 310

专题7.1 参数数目可变的方法 311

计算与社会7.1 计算机病毒 311

7.2 增强的for循环 312

7.3 常用数组算法 314

7.3.1 填充 314

7.3.2 求和与平均值 314

7.3.3 最大值和最小值 314

7.3.4 元素分隔符 315

7.3.5 线性查找 315

7.3.6 删除一个元素 316

7.3.7 插入一个元素 316

7.3.8 交换元素 317

7.3.9 复制数组 318

7.3.1 0读取输入 319

常见错误7.3 低估数据集的大小 322

专题7.2 利用Java库排序 322

7.4 解决问题:调整算法 323

操作指南7.1 处理数组 325

实用示例7.1 掷骰子 327

7.5 解决问题:通过管理实体对象发现算法 327

7.6 二维数组 330

7.6.1 声明二维数组 331

7.6.2 访问元素 332

7.6.3 定位相邻元素 333

7.6.4 访问行和列 333

实用示例7.2 世界入口表 336

专题7.3 行长度可变的二维数组 336

专题7.4 多维数组 337

7.7 数组列表 338

7.7.1 声明和使用数组列表 338

7.7.2 对数组列表使用增强的for循环 340

7.7.3 复制数组列表 341

7.7.4 包装器和自动装箱 341

7.7.5 对数组列表使用数组算法 342

7.7.6 在数组列表中存储输入值 343

7.7.7 删除匹配元素 343

7.7.8 在数组列表和数组间选择 344

常见错误7.4 长度和大小 346

专题7.5 钻石语法 346

7.8 回归测试 346

编程技巧7.3 批文件和Shell脚本 348

计算与社会7.2 Therac-25事件 349

第二部分 面向对象设计 372

第8章 设计类 372

8.1 发现类 372

8.2 设计好方法 373

8.2.1 提供一个一致的公共接口 373

8.2.2 最小化依赖 374

8.2.3 区分访问器和修改器 375

8.2.4 最小化副作用 376

编程技巧8.1 一致性 377

专题8.1 按值调用和按引用调用 378

8.3 解决问题:对象数据模式 382

8.3.1 管理总数 382

8.3.2 统计事件 382

8.3.3 收集值 383

8.3.4 管理对象的属性 384

8.3.5 为有不同状态的对象建模 384

8.3.6 描述对象的位置 385

8.4 静态变量和方法 386

编程技巧8.2 尽量减少使用静态方法 389

常见错误8.1 试图在静态方法中访问实例变量 389

专题8.2 初始化实例和静态变量的其他形式 390

专题8.3 静态导入 390

8.5 解决问题:先解决比较简单的问题 391

8.6 包 395

8.6.1 将相关的类组织为包 395

8.6.2 导入包 396

8.6.3 包名 396

8.6.4 包和源文件 397

常见错误8.2 混淆点号 398

专题8.4 包访问 398

操作指南8.1 使用包编程 399

8.7 单元测试框架 400

计算与社会8.1 个人计算 402

第9章 继承 416

9.1 继承层次体系 416

编程技巧9.1 单个类表示值的差异,继承表示行为的差异 419

9.2 实现子类 420

常见错误9.1 从超类复制实例变量 423

常见错误9.2 混淆超类和子类 424

9.3 覆盖方法 424

常见错误9.3 意外重载 428

常见错误9.4 调用超类方法时忘记使用super 429

专题9.1 调用超类构造函数 429

9.4 多态 430

专题9.2 动态方法查找和隐式参数 434

专题9.3 抽象类 434

专题9.4 最终方法和最终类 436

专题9.5 保护访问 436

操作指南9.1 开发一个继承层次体系 437

实用示例9.1 实现一个员工层次结构完成工资处理 442

9.5 Object:所有类的超类 442

9.5.1 覆盖tostring方法 442

9.5.2 equals方法 443

9.5.3 i nstanceof操作符 444

常见错误9.5 不要使用类型测试 446

专题9.6 继承和tostring方法 447

专题9.7 继承和equals方法 447

计算与社会9.1 谁在控制互联网? 448

第10章 接口 457

10.1 使用接口实现算法重用 457

10.1.1 发现接口类型 458

10.1.2 声明接口类型 458

10.1.3 实现接口类型 460

10.1.4 比较接口和继承 462

常见错误10.1 忘记将实现方法声明为公共方法 463

常见错误10.2 试图实例化一个接口 463

专题10.1 接口中的常量 464

Java 8说明10.1 接口中的静态方法 464

Java 8说明10.2 默认方法 464

Java 8说明10.3 冲突的默认方法 465

10.2 处理接口类型 466

10.2.1 从类转换为接口 466

10.2.2 在接口变量上调用方法 467

10.2.3 从接口强制转换为类 467

实用示例10.1 研究数字序列 468

10.3 Comparable接口 469

编程技巧10.1 比较整数和浮点数 470

专题10.2 clone方法和Cloneable接口 470

10.4 使用接口实现回调 473

Java 8说明10.4 lambda表达式 477

专题10.3 泛型接口类型 478

10.5 内部类 479

专题10.4 匿名类 480

10.6 模拟对象 481

10.7 事件处理 482

10.7.1 监听事件 483

10.7.2 使用内部类实现监听器 485

常见错误10.3 在实现方法中改变参数类型 488

常见错误10.4 试图调用监听器方法 488

Java 8说明10.5 lambda表达式实现事件处理 488

10.8 用按钮构建应用 488

常见错误10.5 忘记关联监听器 491

编程技巧10.2 不要把容器用作监听器 492

10.9 处理计时器事件 492

常见错误10.6 忘记重绘 495

10.10 鼠标事件 495

专题10.5 键盘事件 499

专题10.6 事件适配器 499

计算与社会10.1 开源和免费软件 500

第11章 输入/输出和异常处理 512

11.1 读写文本文件 512

常见错误11.1 文件名中的反斜线 515

常见错误11.2 用String构造一个Scanner 515

专题11.1 读Web页面 515

专题11.2 文件对话框 516

专题11.3 字符编码 516

11.2 文本输入和输出 517

11.2.1 读取单词 517

11.2.2 读取字符 518

11.2.3 字符分类 518

11.2.4 读取文本行 519

11.2.5 扫描字符串 520

11.2.6 把字符串转换为数字 520

11.2.7 读数字时避免错误 521

11.2.8 混合数字、单词和文本行输入 521

11.2.9 格式化输出 522

专题11.4 正则表达式 524

专题11.5 读取整个文件 524

11.3 命令行参数 525

操作指南11.1 处理文本文件 527

实用示例11.1 分析婴儿名字 530

计算与社会11.1 加密算法 531

11.4 异常处理 532

11.4.1 抛出异常 532

11.4.2 捕获异常 533

11.4.3 受查异常 535

11.4.4 关闭资源 536

11.4.5 设计你自己的异常类型 537

编程技巧11.1 早抛出,晚捕获 539

编程技巧11.2 不要压制异常 539

编程技巧11.3 要抛出特定的异常 540

专题11.6 断言 540

专题11.7 try/finally语句 541

11.5 应用:处理输入错误 541

计算与社会11.2 阿丽亚娜火箭事故 546

第12章 面向对象设计 556

12.1 类及其职责 556

12.1.1 发现类 556

12.1.2 CRC卡方法 557

12.2 类之间的关系 558

12.2.1 依赖 558

12.2.2 聚合 559

12.2.3 继承 560

操作指南12.1 程序设计中使用CRC卡和UML图 561

专题12.1 UML图中的属性和方法 562

专题12.2 重数 563

专题12.3 聚合、关联和组合 563

12.3 应用:打印一个发货单 564

12.3.1 需求 564

12.3.2 CRC卡 565

12.3.3 UML图 567

12.3.4 方法文档 567

12.3.5 实现 569

计算与社会12.1 数据库和隐私 574

实用示例12.1 模拟一个自动柜员机 575

附录A Unicode基本拉丁语和拉丁语-1子集 581

附录B Java操作符小结 583

附录C Java保留字小结 585

附录D Java库 587

附录E Java语言编码指南 608

术语表 614