《Java面向对象编程 第2版》PDF下载

  • 购买积分:20 如何计算积分?
  • 作  者:孙卫琴编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2017
  • ISBN:7121303142
  • 页数:737 页
图书介绍:

第1章 面向对象开发方法概述 1

1.1 结构化的软件开发方法简介 3

1.2 面向对象的软件开发方法简介 6

1.2.1 对象模型 6

1.2.2 UML:可视化建模语言 7

1.2.3 Rational Rose:可视化建模工具 7

1.3 面向对象开发中的核心思想和概念 8

1.3.1 问题领域、对象、属性、状态、行为、方法、实现 8

1.3.2 类、类型 10

1.3.3 消息、服务 12

1.3.4 接口 13

1.3.5 封装、透明 14

1.3.6 抽象 18

1.3.7 继承、扩展、覆盖 20

1.3.8 组合 21

1.3.9 多态、动态绑定 24

1.4 UML语言简介 26

1.4.1 用例图 27

1.4.2 类框图 28

1.4.3 时序图 29

1.4.4 协作图 30

1.4.5 状态转换图 30

1.4.6 组件图 31

1.4.7 部署图 32

1.5 类之间的关系 32

1.5.1 关联(Association) 33

1.5.2 依赖(Dependency) 34

1.5.3 聚集(Aggregation) 35

1.5.4 泛化(Generalization) 36

1.5.5 实现(Realization) 36

1.5.6 区分依赖、关联和聚集关系 36

1.6 实现Panel系统 39

1.6.1 扩展Panel系统 42

1.6.2 用配置文件进一步提高Panel系统的可维护性 43

1.6.3 运行Panel系统 45

1.7 小结 45

1.8 思考题 46

第2章 第一个Java应用 47

2.1 创建Java源文件 47

2.1.1 Java源文件结构 49

2.1.2 包声明语句 49

2.1.3 包引入语句 51

2.1.4 方法的声明 53

2.1.5 程序入口main()方法的声明 54

2.1.6 给main()方法传递参数 55

2.1.7 注释语句 55

2.1.8 关键字 56

2.1.9 标识符 56

2.1.10 编程规范 57

2.2 用JDK管理Java应用 57

2.2.1 JDK简介以及安装方法 58

2.2.2 编译Java源文件 60

2.2.3 运行Java程序 62

2.2.4 给Java应用打包 65

2.3 使用和创建JavaDoc文档 66

2.3.1 JavaDoc标记 68

2.3.2 javadoc命令的用法 73

2.4 Java虚拟机运行Java程序的基本原理 75

2.5 小结 77

2.6 思考题 78

第3章 数据类型和变量 81

3.1 基本数据类型 82

3.1.1 boolean类型 82

3.1.2 byte、short、int和long类型 83

3.1.3 char类型与字符编码 85

3.1.4 float和double类型 87

3.2 引用类型 91

3.2.1 基本类型与引用类型的区别 92

3.2.2 用new关键字创建对象 94

3.3 变量的作用域 95

3.3.1 实例变量和静态变量的生命周期 97

3.3.2 局部变量的生命周期 100

3.3.3 成员变量和局部变量同名 101

3.3.4 将局部变量的作用域最小化 102

3.4 对象的默认引用:this 103

3.5 参数传递 105

3.6 变量的初始化以及默认值 107

3.6.1 成员变量的初始化 107

3.6.2 局部变量的初始化 108

3.7 直接数 109

3.7.1 直接数的类型 110

3.7.2 直接数的赋值 111

3.8 小结 112

3.9 思考题 113

第4章 操作符 115

4.1 操作符简介 115

4.2 整型操作符 116

4.2.1 一元整型操作符 117

4.2.2 二元整型操作符 118

4.3 浮点型操作符 123

4.4 比较操作符和逻辑操作符 124

4.5 特殊操作符“?:” 127

4.6 字符串连接操作符“+” 127

4.7 操作符“==”与对象的equals()方法 129

4.7.1 操作符“==” 129

4.7.2 对象的equals()方法 130

4.8 instanceof操作符 133

4.9 变量的赋值和类型转换 135

4.9.1 基本数据类型转换 136

4.9.2 引用类型的类型转换 139

4.10 小结 139

4.11 思考题 142

第5章 流程控制 145

5.1 分支语句 146

5.1.1 if else语句 146

5.1.2 switch语句 150

5.2 循环语句 154

5.2.1 while语句 154

5.2.2 do while语句 156

5.2.3 for语句 158

5.2.4 foreach语句 161

5.2.5 多重循环 162

5.3 流程跳转语句 162

5.4 综合例子:八皇后问题 165

5.5 小结 168

5.6 思考题 169

第6章 继承 173

6.1 继承的基本语法 173

6.2 方法重载(Overload) 175

6.3 方法覆盖(Override) 177

6.4 方法覆盖与方法重载的异同 183

6.5 super关键字 183

6.6 多态 185

6.7 继承的利弊和使用原则 189

6.7.1 继承树的层次不可太多 190

6.7.2 继承树的上层为抽象层 190

6.7.3 继承关系最大的弱点:打破封装 191

6.7.4 精心设计专门用于被继承的类 193

6.7.5 区分对象的属性与继承 195

6.8 比较组合与继承 197

6.8.1 组合关系的分解过程对应继承关系的抽象过程 197

6.8.2 组合关系的组合过程对应继承关系的扩展过程 200

6.9 小结 203

6.10 思考题 204

第7章 Java语言中的修饰符 209

7.1 访问控制修饰符 210

7.2 abstract修饰符 212

7.3 final修饰符 214

7.3.1 final类 215

7.3.2 final方法 215

7.3.3 final变量 216

7.4 static修饰符 220

7.4.1 static变量 220

7.4.2 static方法 223

7.4.3 static代码块 226

7.4.4 用static进行静态导入 228

7.5 小结 228

7.6 思考题 230

第8章 接口 233

8.1 接口的概念和基本特征 234

8.2 比较抽象类与接口 237

8.3 与接口相关的设计模式 241

8.3.1 定制服务模式 241

8.3.2 适配器模式 245

8.3.3 默认适配器模式 250

8.3.4 代理模式 251

8.3.5 标识类型模式 256

8.3.6 常量接口模式 257

8.4 小结 258

8.5 思考题 259

第9章 异常处理 261

9.1 Java异常处理机制概述 262

9.1.1 Java异常处理机制的优点 262

9.1.2 Java虚拟机的方法调用栈 264

9.1.3 异常处理对性能的影响 267

9.2 运用Java异常处理机制 267

9.2.1 try-catch语句:捕获异常 267

9.2.2 fiinally语句:任何情况下必须执行的代码 268

9.2.3 throws子句:声明可能会出现的异常 270

9.2.4 throw语句:抛出异常 271

9.2.5 异常处理语句的语法规则 271

9.2.6 异常流程的运行过程 274

9.2.7 跟踪丢失的异常 278

9.3 Java异常类 280

9.3.1 运行时异常 282

9.3.2 受检查异常(Checked Exception) 282

9.3.3 区分运行时异常和受检查异常 283

9.4 用户定义异常 285

9.4.1 异常转译和异常链 285

9.4.2 处理多样化异常 288

9.5 异常处理原则 289

9.5.1 异常只能用于非正常情况 290

9.5.2 为异常提供说明文档 290

9.5.3 尽可能地避免异常 291

9.5.4 保持异常的原子性 292

9.5.5 避免过于庞大的try代码块 294

9.5.6 在catch子句中指定具体的异常类型 294

9.5.7 不要在catch代码块中忽略被捕获的异常 294

9.6 记录日志 295

9.6.1 创建Logger对象及设置日志级别 296

9.6.2 生成日志 297

9.6.3 把日志输出到文件 297

9.6.4 设置日志的输出格式 298

9.7 使用断言 299

9.8 小结 300

9.9 思考题 301

第10章 类的生命周期 305

10.1 Java虚拟机及程序的生命周期 305

10.2 类的加载、连接和初始化 305

10.2.1 类的加载 306

10.2.2 类的验证 307

10.2.3 类的准备 307

10.2.4 类的解析 308

10.2.5 类的初始化 308

10.2.6 类的初始化的时机 310

10.3 类加载器 313

10.3.1 类加载的父亲委托机制 315

10.3.2 创建用户自定义的类加载器 317

10.3.3 URLClassLoader类 323

10.4 类的卸载 324

10.5 小结 325

10.6 思考题 326

第11章 对象的生命周期 327

11.1 创建对象的方式 327

11.2 构造方法 330

11.2.1 重载构造方法 331

11.2.2 默认构造方法 332

11.2.3 子类调用父类的构造方法 333

11.2.4 构造方法的作用域 337

11.2.5 构造方法的访问级别 337

11.3 静态工厂方法 338

11.3.1 单例类 340

11.3.2 枚举类 342

11.3.3 不可变(immutable)类与可变类 344

11.3.4 具有实例缓存的不可变类 348

11.3.5 松耦合的系统接口 350

11.4 垃圾回收 351

11.4.1 对象的可触及性 352

11.4.2 垃圾回收的时间 354

11.4.3 对象的finalize()方法简介 354

11.4.4 对象的fiinalize()方法的特点 355

11.4.5 比较fiinalize()方法和fiinally代码块 357

11.5 清除过期的对象引用 358

11.6 对象的强、软、弱和虚引用 360

11.7 小结 366

11.8 思考题 367

第12章 内部类 371

12.1 内部类的基本语法 371

12.1.1 实例内部类 373

12.1.2 静态内部类 376

12.1.3 局部内部类 377

12.2 内部类的继承 379

12.3 子类与父类中的内部类同名 380

12.4 匿名类 381

12.5 内部接口以及接口中的内部类 384

12.6 内部类的用途 385

12.6.1 封装类型 385

12.6.2 直接访问外部类的成员 385

12.6.3 回调 386

12.7 内部类的类文件 388

12.8 小结 389

12.9 思考题 389

第13章 多线程 393

13.1 Java线程的运行机制 393

13.2 线程的创建和启动 395

13.2.1 扩展java.lang.Thread类 395

13.2.2 实现Runnable接口 400

13.3 线程的状态转换 402

13.3.1 新建状态 402

13.3.2 就绪状态 402

13.3.3 运行状态 402

13.3.4 阻塞状态 403

13.3.5 死亡状态 404

13.4 线程调度 405

13.4.1 调整各个线程的优先级 406

13.4.2 线程睡眠:Thread.sleep()方法 408

13.4.3 线程让步:Thead.yield()方法 409

13.4.4 等待其他线程结束:join() 410

13.5 获得当前线程对象的引用 411

13.6 后台线程 412

13.7 定时器 413

13.8 线程的同步 415

13.8.1 同步代码块 418

13.8.2 线程同步的特征 422

13.8.3 同步与并发 425

13.8.4 线程安全的类 426

13.8.5 释放对象的锁 427

13.8.6 死锁 429

13.9 线程通信 430

13.10 中断阻塞 435

13.11 线程控制 436

13.11.1 被废弃的suspend()和resume()方法 437

13.11.2 被废弃的stop()方法 438

13.11.3 以编程的方式控制线程 438

13.12 线程组 440

13.13 处理线程未捕获的异常 441

13.14 ThreadLocal类 443

13.15 concurrent并发包 445

13.15.1 用于线程同步的Lock外部锁 446

13.15.2 用于线程通信的Condition条件接口 447

13.15.3 支持异步计算的Callable接口和Future接口 450

13.15.4 通过线程池来高效管理多个线程 452

13.15.5 BlockingQueue阻塞队列 454

13.16 小结 457

13.17 思考题 458

第14章 数组 461

14.1 数组变量的声明 461

14.2 创建数组对象 462

14.3 访问数组的元素和长度 463

14.4 数组的初始化 465

14.5 多维数组以及不规则数组 465

14.6 调用数组对象的方法 467

14.7 把数组作为方法参数或返回值 467

14.8 数组排序 470

14.9 数组的二分查找算法 471

14.10 哈希表 472

14.11 数组实用类:Arrays 477

14.12 用符号“...”声明数目可变参数 480

14.13 小结 481

14.14 思考题 481

第15章 Java集合 485

15.1 Collection和Iterator接口 486

15.2 集合中直接加入基本类型数据 489

15.3 Set(集) 490

15.3.1 Set的一般用法 490

15.3.2 HashSet类 491

15.3.3 TreeSet类 493

15.4 List(列表) 497

15.4.1 访问列表的元素 498

15.4.2 为列表排序 498

15.4.3 ListIterator接口 499

15.4.4 获得固定长度的List对象 500

15.4.5 比较Java数组和各种List的性能 500

15.5 Queue(队列) 503

15.5.1 Deque(双向队列) 504

15.5.2 PriorityQueue(优先级队列) 505

15.6 Map(映射) 505

15.7 HashSet和HashMap的负载因子 507

15.8 集合实用类:Collections 508

15.9 线程安全的集合 510

15.10 集合与数组的互换 511

15.11 集合的批量操作 512

15.12 历史集合类 513

15.13 枚举类型 517

15.13.1 枚举类型的构造方法 519

15.13.2 EnumSet类和EnumMap类 520

15.14 小结 521

15.15 思考题 521

第16章 泛型 523

16.1 Java集合的泛型 523

16.2 定义泛型类和泛型接口 524

16.3 用extends关键字限定类型参数 526

16.4 定义泛型数组 527

16.5 定义泛型方法 528

16.6 使用“?”通配符 529

16.7 使用泛型的注意事项 530

16.8 小结 531

16.9 思考题 531

第17章 Lambda表达式 533

17.1 Lambda表达式的基本用法 533

17.2 用Lambda表达式代替内部类 534

17.3 Lambda表达式和集合的forEach()方法 535

17.4 用Lambda表达式对集合进行排序 536

17.5 Lambda表达式与Stream API联合使用 537

17.6 Lambda表达式可操纵的变量作用域 539

17.7 Lambda表达式中的方法引用 540

17.8 函数式接口(Functional Interface) 541

17.9 总结Java语法糖 541

17.10 小结 542

17.11 思考题 542

第18章 输入与输出(I/O) 545

18.1 输入流和输出流概述 546

18.2 输入流 547

18.2.1 字节数组输入流:ByteArrayInputStream类 548

18.2.2 文件输入流:FileInputStream类 549

18.2.3 管道输入流:PipedInputStream 551

18.2.4 顺序输入流:SequenceInputStream类 552

18.3 过滤输入流:FilterInputStream 552

18.3.1 装饰器设计模式 553

18.3.2 过滤输入流的种类 554

18.3.3 DataInputStream类 555

18.3.4 BufferedInputStream类 556

18.3.5 PushbackInputStream类 557

18.4 输出流 557

18.4.1 字节数组输出流:ByteArrayOutputStream类 557

18.4.2 文件输出流:FileOutputStream 558

18.5 过滤输出流:FilterOutputStream 559

18.5.1 DataOutputStream 559

18.5.2 BufferedOutputStream 559

18.5.3 PrintStream类 561

18.6 Reader/Writer概述 563

18.7 Reader类 565

18.7.1 字符数组输入流:CharArrayReader类 566

18.7.2 字符串输入流:StringReader类 566

18.7.3 InputStreamReader类 567

18.7.4 FileReader类 568

18.7.5 BufferedReader类 568

18.8 Writer类 568

18.8.1 字符数组输出流:CharArrayWriter类 569

18.8.2 OutputStreamWriter类 570

18.8.3 FileWriter类 572

18.8.4 BufferedWriter类 573

18.8.5 PrintWriter类 573

18.9 标准I/O 574

18.9.1 重新包装标准输入和输出 574

18.9.2 标准I/O重定向 575

18.10 随机访问文件类:Randon AccessFile 576

18.11 新I/O类库 577

18.11.1 缓冲器Buffer概述 578

18.11.2 通道Channel概述 579

18.11.3 字符编码Charset类概述 581

18.11.4 用FileChannel读写文件 581

18.11.5 控制缓冲区 582

18.11.6 字符编码转换 583

18.11.7 缓冲区视图 584

18.11.8 文件映射缓冲区:MappedByteBuffer 586

18.11.9 文件加锁 587

18.12 对象的序列化与反序列化 589

18.13 自动释放资源 595

18.14 用File类来查看、创建和删除文件或目录 596

18.15 用java.nio.fiile类库来操作文件系统 599

18.15.1 复制、移动文件以及遍历、过滤目录树 600

18.15.2 查看ZIP压缩文件 601

18.16 小结 602

18.17 思考题 603

第19章 图形用户界面 605

19.1 AWT组件和Swing组件 605

19.2 创建图形用户界面的基本步骤 608

19.3 布局管理器 610

19.3.1 FlowLayout(流式布局管理器) 611

19.3.2 BorderLayout(边界布局管理器) 613

19.3.3 GridLayout(网格布局管理器) 616

19.3.4 CardLayout(卡片布局管理器) 619

19.3.5 GridBagLayout(网格包布局管理器) 620

19.4 事件处理 626

19.4.1 事件处理的软件实现 626

19.4.2 事件源事件和监听器的类层次和关系 632

19.5 AWT绘图 637

19.5.1 Graphics类 639

19.5.2 Graphics2D类 644

19.6 AWT线程(事件分派线程) 647

19.7 小结 649

19.8 思考题 650

第20章 常用Swing组件 653

20.1 边框(Border) 653

20.2 按钮组件(AbstractButton)及子类 654

20.3 文本框(JTextField) 657

20.4 文本区域(JTextArea)与滚动面板(JScrollPane) 660

20.5 复选框(JCheckBox)与单选按钮(JRadioButton) 661

20.6 下拉列表(JComboBox) 664

20.7 列表框(JList) 665

20.8 页签面板(JTabbedPane) 667

20.9 菜单(JMenu) 669

20.10 对话框(JDialog) 674

20.11 文件对话框(JFileChoose) 676

20.12 消息框 679

20.13 制作动画 681

20.14 播放音频文件 683

20.15 BoxLayout布局管理器 686

20.16 设置Swing界面的外观和感觉 689

20.17 小结 691

20.18 思考题 692

第21章 Java常用类 693

21.1 Object类 693

21.2 String类和StringBuffer类 694

21.2.1 String类 694

21.2.2 “hello”与new String(“hello”)的区别 697

21.2.3 StringBuffer类 698

21.2.4 比较String类与StringBuffer类 699

21.2.5 正则表达式 701

21.2.6 格式化字符串 703

21.3 包装类 707

21.3.1 包装类的构造方法 707

21.3.2 包装类的常用方法 708

21.3.3 包装类的自动装箱和拆箱 709

21.4 Math类 710

21.5 Random类 712

21.6 传统的处理日期/时间的类 712

21.6.1 Date类 713

21.6.2 DateFonnat类 713

21.6.3 Calendar类 715

21.7 新的处理日期/时间的类 716

21.7.1 LocalDate类 717

21.7.2 LocalTime类 718

21.7.3 LocalDateTime类 718

21.8 BigInteger类 719

21.9 BigDecimal类 720

21.10 用Optional类避免空指针异常 722

21.11 小结 724

21.12 思考题 725

第22章 Annotation注解 727

22.1 自定义Annotation注解类型 727

22.2 在类的源代码中引用注解类型 730

22.3 在程序中运用反射机制读取类的注解信息 732

22.4 基本内置注解 735

22.5 小结 736

22.6 思考题 736