当前位置:当前位置:主页 > 计算机电子书 > > Java基础 pdf电子书
On Java 中文版 基础卷

On Java 中文版 基础卷 PDF 清晰完整版

  • 更新:2023-01-16
  • 大小:91.9 MB
  • 类别:Java基础
  • 作者:布鲁斯·埃克尔(Bruce、Eckel)
  • 出版:人民邮电出版社
  • 格式:PDF

  • 资源介绍
  • 学习心得
  • 相关内容

On Java 中文版 基础卷》是由人民邮电出版社出版的一本关于Java基础方面的书籍,作者是布鲁斯·埃克尔(Bruce、Eckel),主要介绍了关于Java方面的知识内容,目前在Java基础类书籍综合评分为:9.4分。

书籍介绍

java编程开发语言程序设计核心技术教程书籍,Thinkingin作者BruceEckel重讲Java的编程思想,基于Java81117,配套视频讲解与导读指南!

编辑推荐

基于Java8、11、17,Thinkingin系列书籍作者BruceEckel重讲Java的编程思想!

1.查漏宝典:涵盖Java关键特性的设计原理和应用方法

2.避坑指南:以产业实践的得失为鉴,指明Java开发者不可不知的设计陷阱

3.小白大神皆可读:适合不同层次的Java开发者反复翻阅

4.大咖领读:3位一线技术专家带你拆解书中难点内容,总结Java开发精要

内容简介

本书是布鲁斯埃克尔时隔15年,继ThinkinginJava之后又一力作,基于Java的3个长期支持版(Java8、11、17),讲解Java核心语法,并对Java的核心变化进行详述。全书内容通俗易懂,配合示例讲解逐步深入,并结合实际开发需要,从语言底层设计出发,有效帮读者规避一些常见的开发陷阱。
主体部分共22章,内容包含对象、操作符、控制流、初始化和清理、复用、多态、接口、内部类、集合、函数式编程、流、异常、代码校验、文件、字符串、泛型等。

本书适合各个层次的Java开发者阅读,同时也可作为面向对象程序设计语言以及Java语言的参考教材。

目录

  • 第1章什么是对象/001
  • 1.1抽象的历程/002
  • 1.2对象具有接口/003
  • 1.3对象可以提供服务/005
  • 1.4隐藏的实现/006
  • 1.5复用实现/008
  • 1.6继承/008
  • is-a关系与is-like-a关系/012
  • 1.7多态/013
  • 1.8单根层次结构/016
  • 1.9集合/017
  • 参数化类型(泛型)/018
  • 1.10对象的创建和生命周期/019
  • 1.11异常处理/021
  • 1.12总结/022
  • 第2章安装Java和本书示例/023
  • 2.1编辑器/023
  • 2.2shell/024
  • 2.2.1运行shell/024
  • 2.2.2目录(文件夹)/025
  • 2.2.3shell基础操作/025
  • 2.3安装Java/026
  • 2.4确认安装成功/027
  • 2.5安装和运行本书示例/028
  • Gradle基础任务/028
  • 第3章对象无处不在/029
  • 3.1通过引用操作对象/030
  • 3.2必须创建所有对象/031
  • 3.2.1数据保存在哪里/031
  • 3.2.2特殊情况:基本类型/032
  • 3.2.3Java中的数组/034
  • 3.3注释/034
  • 3.4无须销毁对象/035
  • 3.4.1作用域/035
  • 3.4.2对象的作用域/036
  • 3.5使用class关键字创建新类型/037
  • 字段/037
  • 3.6方法、参数以及返回值/039
  • 参数列表/039
  • 3.7编写Java程序/041
  • 3.7.1名称可见性/041
  • 3.7.2使用其他组件/042
  • 3.7.3static关键字/043
  • 3.8你的第一个Java程序/045
  • 编译和运行/047
  • 3.9编程风格/048
  • 3.10总结/049
  • 第4章操作符/050
  • 4.1使用Java操作符/050
  • 4.2优先级/051
  • 4.3赋值/051
  • 方法调用中的别名/053
  • 4.4算术操作符/054
  • 一元加操作符和一元减操作符/055
  • 4.5自动递增和自动递减/056
  • 4.6关系操作符/057
  • 测试对象是否相等/057
  • 4.7逻辑操作符/061
  • 短路/062
  • 4.8字面量/063
  • 4.8.1字面量里的下划线/065
  • 4.8.2科学记数法(又称“指数
  • 记数法”)/066
  • 4.9按位操作符/067
  • 4.10移位操作符/067
  • 4.11三元操作符/071
  • 4.12字符串操作符和=/072
  • 4.13使用操作符时常犯的错误/073
  • 4.14类型转换操作符/074
  • 4.14.1截尾和舍入/075
  • 4.14.2提升/076
  • 4.15Java没有sizeof()/076
  • 4.16操作符小结/076
  • 4.17总结/081
  • 第5章控制流/082
  • 5.1true和false/082
  • 5.2if-else/083
  • 5.3迭代语句/084
  • 5.3.1do-while/085
  • 5.3.2for/085
  • 5.3.3逗号操作符/086
  • 5.4for-in语法/087
  • 5.5return/089
  • 5.6break和continue/090
  • 5.7臭名昭著的goto/091
  • 5.8switch/095
  • 5.9字符串作为选择器/096
  • 5.10总结/098
  • 第6章初始化和清理/099
  • 6.1用构造器保证初始化/100
  • 6.2方法重载/102
  • 6.2.1区分重载的方法/103
  • 6.2.2使用基本类型的重载/104
  • 6.2.3通过返回值区分重载方法/107
  • 6.3无参构造器/108
  • 6.4this关键字/109
  • 6.4.1在构造器中调用构造器/111
  • 6.4.2static的含义/112
  • 6.5清理:终结和垃圾收集/113
  • 6.5.1finalize()的作用/114
  • 6.5.2你必须执行清理/115
  • 6.5.3终止条件/115
  • 6.5.4垃圾收集器的工作原理/117
  • 6.6成员初始化/120
  • 指定初始化/121
  • 6.7构造器初始化/122
  • 6.7.1初始化顺序/123
  • 6.7.2静态数据的初始化/124
  • 6.7.3显式的静态初始化/126
  • 6.7.4非静态实例初始化/127
  • 6.8数组初始化/128
  • 6.8.1动态数组创建/129
  • 6.8.2可变参数列表/132
  • 6.9枚举类型/136
  • 6.10新特性:局部变量类型
  • 推断/138
  • 6.11总结/140
  • 第7章实现隐藏/141
  • 7.1package:库单元/142
  • 7.1.1代码组织/144
  • 7.1.2创建独一无二的包名/145
  • 7.1.3定制工具库/148
  • 7.1.4用import来改变行为/149
  • 7.1.5关于包的忠告/150
  • 7.2Java访问权限修饰符/150
  • 7.2.1包访问/150
  • 7.2.2public:接口访问权限/151
  • 7.2.3private:你无法访问它/153
  • 7.2.4protected:继承访问权限/154
  • 7.2.5包访问权限与公共构造器/155
  • 7.3接口和实现/156
  • 7.4类的访问权限/157
  • 7.5新特性:模块/160
  • 7.6总结/162
  • 第8章复用/164
  • 8.1组合语法/165
  • 8.2继承语法/167
  • 初始化基类/169
  • 8.3委托/171
  • 8.4组合与继承相结合/173
  • 8.4.1确保正确的清理/175
  • 8.4.2名称隐藏/177
  • 8.5选择组合还是继承/178
  • 8.6protected关键字/180
  • 8.7向上转型/181
  • 再论组合与继承/182
  • 8.8final关键字/182
  • 8.8.1final数据/183
  • 8.8.2final方法/186
  • 8.8.3final类/188
  • 8.8.4关于final的忠告/189
  • 8.9初始化及类的加载/190
  • 继承与初始化/190
  • 8.10总结/191
  • 第9章多态/193
  • 9.1再论向上转型/194
  • 忘记对象类型/195
  • 9.2难点/196
  • 9.2.1方法调用绑定/197
  • 9.2.2产生正确的行为/197
  • 9.2.3可扩展性/201
  • 9.2.4陷阱:“重写”private
  • 方法/203
  • 9.2.5陷阱:字段与静态方法/205
  • 9.3构造器和多态/206
  • 9.3.1构造器的调用顺序/206
  • 9.3.2继承与清理/208
  • 9.3.3构造器内部的多态方法
  • 行为/213
  • 9.4协变返回类型/215
  • 9.5用继承进行设计/216
  • 9.5.1替换与扩展/217
  • 9.5.2向下转型与反射/218
  • 9.6总结/220
  • 第10章接口/221
  • 10.1抽象类和抽象方法/221
  • 10.2接口定义/226
  • 10.2.1默认方法/228
  • 10.2.2多重继承/230
  • 10.2.3接口中的静态方法/233
  • 10.2.4作为接口的Instrument/234
  • 10.3抽象类与接口/236
  • 10.4完全解耦/237
  • 10.5组合多个接口/242
  • 10.6通过继承来扩展接口/244
  • 组合接口时的名称冲突/245
  • 10.7适配接口/246
  • 10.8接口中的字段/249
  • 初始化接口中的字段/249
  • 10.9嵌套接口/250
  • 10.10接口和工厂/252
  • 10.11新特性:接口的private
  • 方法/255
  • 10.12新特性:密封类和密封
  • 接口/256
  • 10.13总结/259
  • 第11章内部类/260
  • 11.1创建内部类/261
  • 11.2到外部类的链接/262
  • 11.3使用.this和.new/264
  • 11.4内部类和向上转型/266
  • 11.5在方法和作用域中的内部类/267
  • 11.6匿名内部类/269
  • 11.7嵌套类/273
  • 11.7.1接口中的类/274
  • 11.7.2从多层嵌套的内部类中
  • 访问外部成员/275
  • 11.8为什么需要内部类/276
  • 11.8.1闭包与回调/278
  • 11.8.2内部类与控制框架/281
  • 11.9继承内部类/287
  • 11.10内部类可以被重写吗/287
  • 11.11局部内部类/289
  • 11.12内部类标识符/291
  • 11.13总结/291
  • 第12章集合/292
  • 12.1泛型和类型安全的集合/293
  • 新特性:类型推断和泛型/296
  • 12.2基本概念/297
  • 12.3添加一组元素/298
  • 12.4打印集合/300
  • 12.5List/302
  • 12.6Iterator/306
  • ListIterator/309
  • 12.7LinkedList/310
  • 12.8Stack/312
  • 12.9Set/314
  • 12.10Map/318
  • 12.11新特性:记录(record)
  • 类型/321
  • 12.12Queue/325
  • PriorityQueue/327
  • 12.13Collection和Iterator的
  • 对比/328
  • 12.14for-in和迭代器/332
  • 适配器方法惯用法/334
  • 12.15总结/338
  • 第13章函数式编程/342
  • 13.1旧方式与新方式/344
  • 13.2lambda表达式/346
  • 递归/348
  • 13.3方法引用/349
  • 13.3.1Runnable/350
  • 13.3.2未绑定方法引用/351
  • 13.3.3构造器方法引用/353
  • 13.4函数式接口/354
  • 13.4.1带有更多参数的函数式
  • 接口/361
  • 13.4.2解决缺乏基本类型函数
  • 式接口的问题/361
  • 13.5高阶函数/363
  • 13.6闭包/364
  • 内部类作为闭包/369
  • 13.7函数组合/370
  • 13.8柯里化和部分求值/372
  • 13.9纯函数式编程/373
  • 13.10总结/374
  • 第14章流/375
  • 14.1Java8对流的支持/377
  • 14.2流的创建/378
  • 14.2.1随机数流/379
  • 14.2.2int类型的区间范围/382
  • 14.2.3generate()/383
  • 14.2.4iterate()/385
  • 14.2.5流生成器/385
  • 14.2.6Arrays/386
  • 14.2.7正则表达式/387
  • 14.3中间操作/388
  • 14.3.1跟踪与调试/389
  • 14.3.2对流元素进行排序/389
  • 14.3.3移除元素/390
  • 14.3.4将函数应用于每个流
  • 元素/390
  • 14.3.5在应用map()期间组
  • 合流/392
  • 14.4Optional类型/395
  • 14.4.1便捷函数/397
  • 14.4.2创建Optional/399
  • 14.4.3Optional对象上的操作/400
  • 14.4.4由Optional组成的流/404
  • 14.5终结操作/405
  • 14.5.1将流转换为一个数组/405
  • 14.5.2在每个流元素上应用某个终结操作/406
  • 14.5.3收集操作/407
  • 14.5.4组合所有的流元素/410
  • 14.5.5匹配/411
  • 14.5.6选择一个元素/412
  • 14.5.7获得流相关的信息/413
  • 14.6小结/415
  • 第15章异常/416
  • 15.1概念/417
  • 15.2基本的异常/418
  • 异常参数/419
  • 15.3捕捉异常/420
  • 15.3.1try块/420
  • 15.3.2异常处理程序/420
  • 15.4创建自己的异常/421
  • 异常与日志记录/424
  • 15.5异常说明/427
  • 15.6捕捉任何异常/428
  • 15.6.1多重捕捉/430
  • 15.6.2栈轨迹/431
  • 15.6.3重新抛出异常/432
  • 15.6.4异常链/436
  • 15.7标准Java异常/439
  • 特例:RuntimeException/440
  • 15.8新特性:更好的NullPointerException
  • 报告机制/441
  • 15.9使用finally执行清理/443
  • 15.9.1finally是干什么用的/444
  • 15.9.2在return期间使用
  • finally/446
  • 15.9.3缺陷:异常丢失/447
  • 15.10异常的约束/449
  • 15.11构造器/452
  • 15.12try-with-resources语句/456
  • 15.12.1细节揭秘/459
  • 15.12.2新特性:try-with-resources中的实际
  • 上的终变量/463
  • 15.13异常匹配/464
  • 15.14其他可选方式/465
  • 15.14.1历史/466
  • 15.14.2观点/468
  • 15.14.3把异常传递到控制台/470
  • 15.14.4将“检查型异常”转换为
  • “非检查型异常”/470
  • 15.15异常使用指南/473
  • 15.16小结/473
  • 附记异常的奇异世界/474
  • 第16章代码校验/476
  • 16.1测试/476
  • 16.1.1单元测试/477
  • 16.1.2测试覆盖率的幻觉/481
  • 16.2前置条件/482
  • 16.2.1断言/482
  • 16.2.2DbC单元测试/488
  • 16.2.3使用Guava里的前置
  • 条件/495
  • 16.3测试驱动开发/498
  • 测试驱动与测试优先/505
  • 16.4日志/505
  • 日志级别/507
  • 16.5调试/508
  • 16.5.1使用JDB进行调试/508
  • 16.5.2图形调试器/511
  • 16.6基准测试/511
  • 16.6.1微基准测试/512
  • 16.6.2介绍JMH/514
  • 16.7分析与优化/520
  • 优化指南/520
  • 16.8样式检查/521
  • 16.9静态错误分析/521
  • 16.10代码审查/521
  • 16.11结对编程/522
  • 16.12重构/522
  • 重构的基础/522
  • 16.13持续集成/523
  • 16.14总结/525
  • 第17章文件/526
  • 17.1文件和目录路径/527
  • 17.1.1选择Path的片段/530
  • 17.1.2分析Path/531
  • 17.1.3添加或删除路径片段/532
  • 17.2目录/533
  • 17.3文件系统/537
  • 17.4监听Path/538
  • 17.5查找文件/541
  • 17.6读写文件/543
  • 17.7小结/546
  • 第18章字符串/547
  • 18.1不可变的字符串/547
  • 18.2重载与StringBuilder/548
  • 18.3无意识的递归/553
  • 18.4对字符串的操作/555
  • 18.5格式化输出/556
  • 18.5.1printf()/556
  • 18.5.2System.out.format()/557
  • 18.5.3Formatter类/557
  • 18.5.4格式说明符/558
  • 18.5.5Formatter转换/560
  • 18.5.6String.format()/562
  • 18.6新特性:文本块/563
  • 18.7正则表达式/565
  • 18.7.1基础/566
  • 18.7.2创建正则表达式/569
  • 18.7.3量词/571
  • 18.7.4Pattern和Matcher/572
  • 18.7.5split()/580
  • 18.7.6替换操作/580
  • 18.7.7reset()/582
  • 18.7.8正则表达式和Java
  • I/O/583
  • 18.8扫描输入/584
  • 18.8.1Scanner分隔符/586
  • 18.8.2使用正则表达式扫描/586
  • 18.9StringTokenizer/587
  • 18.10总结/588
  • 第19章反射/589
  • 19.1为什么需要反射/589
  • 19.2Class对象/592
  • 19.2.1类字面量/596
  • 19.2.2泛型类的引用/598
  • 19.2.3cast()方法/602
  • 19.3转型前检查/603
  • 19.3.1使用类字面量/609
  • 19.3.2动态的instanceof/611
  • 19.3.3递归计数/612
  • 19.4注册工厂/614
  • 19.5Instanceof与Class的
  • 等价性/616
  • 19.6运行时的类信息/618
  • 类方法提取器/619
  • 19.7动态代理/621
  • 19.8使用Optional/625
  • 19.8.1标签接口/630
  • 19.8.2模拟对象和桩/633
  • 19.9接口和类型信息/633
  • 19.10总结/639
  • 第20章泛型/641
  • 20.1和C的对比/642
  • 20.2简单泛型/643
  • 20.2.1元组库/645
  • 20.2.2栈类/648
  • 20.2.3RandomList/649
  • 20.3泛型接口/650
  • 20.4泛型方法/653
  • 20.4.1可变参数和泛型方法/654
  • 20.4.2通用Supplier/655
  • 20.4.3简化元组的使用/657
  • 20.4.4Set实用工具/658
  • 20.5构建复杂模型/663
  • 20.6类型擦除的奥秘/665
  • 20.6.1C的实现方法/667
  • 20.6.2迁移的兼容性/669
  • 20.6.3类型擦除存在的问题/670
  • 20.6.4边界的行为/672
  • 20.7对类型擦除的补偿/676
  • 20.7.1创建类型实例/677
  • 20.7.2泛型数组/680
  • 20.8边界/686
  • 20.9通配符/689
  • 20.9.1编译器有多聪明?/692
  • 20.9.2逆变性/694
  • 20.9.3无界通配符/696
  • 20.9.4捕获转换/705
  • 20.10问题/707
  • 20.10.1基本类型不可作为
  • 类型参数/707
  • 20.10.2实现参数化接口/709
  • 20.10.3类型转换和警告/709
  • 20.10.4重载/712
  • 20.10.5基类会劫持接口/712
  • 20.11自限定类型/714
  • 20.11.1奇异递归泛型/714
  • 20.11.2自限定/715
  • 20.11.3参数协变性/718
  • 20.12动态类型安全/721
  • 20.13异常/722
  • 20.14混型/724
  • 20.14.1C中的混型/724
  • 20.14.2与接口混合/726
  • 20.14.3使用装饰器模式/727
  • 20.14.4与动态代理混合/729
  • 20.15潜在类型机制/730
  • 20.15.1Python中的潜在类型
  • 机制/731
  • 20.15.2C中的潜在类型
  • 机制/732
  • 20.15.3Go中的潜在类型
  • 机制/733
  • 20.15.4Java中的直接潜在
  • 类型机制/735
  • 20.16对于缺少(直接的)潜在类型机制的补偿/736
  • 20.16.1反射/736
  • 20.16.2将方法应用于序列/737
  • 20.17Java8中的辅助潜在类型
  • 机制/741
  • 使用Supplier的泛型方法/743
  • 20.18总结:转型真的这么糟糕吗?/745
  • 延伸阅读/747
  • 第21章数组/748
  • 21.1数组为何特殊/749
  • 一个用于显示数组的常用工具
  • 程序/751
  • 21.2数组是一等对象/752
  • 21.3返回数组/755
  • 21.4多维数组/757
  • 21.5数组和泛型/761
  • 21.6Arrays.fill()/764
  • 21.7Arrays.setAll()/765
  • 21.8增量生成器/766
  • 21.9随机数生成器/775
  • 21.10泛型和基本类型数组/783
  • 21.11修改已有的数组元素/787
  • 21.12关于数组并行/788
  • 21.12.1策略/789
  • 21.12.2parallelSetAll()/789
  • 21.13数组实用工具/790
  • 21.14数组复制/791
  • 21.15数组比较/794
  • 21.16流和数组/795
  • 21.17数组排序/796
  • 21.17.1使用Arrays.sort()/800
  • 21.17.2并行排序/801
  • 21.18用Arrays.binarySearch()进行二分查找/802
  • 21.19用parallelPrefix()进行累积计算/804
  • 21.20总结/806
  • 补充内容/809
  • 积极看待C与Java的
  • 遗产/810

资源获取

相关资源

网友留言