图书介绍
疯狂Java讲义精粹PDF|Epub|txt|kindle电子书版本网盘下载
- 李刚编著 著
- 出版社: 北京:电子工业出版社
- ISBN:9787121155796
- 出版时间:2012
- 标注页数:580页
- 文件大小:272MB
- 文件页数:597页
- 主题词:JAVA语言-程序设计
PDF下载
下载说明
疯狂Java讲义精粹PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 Java语言概述1
1.1 Java语言的发展简史2
1.2 Java的竞争对手及各自优势5
1.2.1 C#简介和优势5
1.2.2 Ruby简介和优势5
1.2.3 Python简介和优势6
1.3 Java程序运行机制7
1.3.1高级语言的运行机制7
1.3.2 Java程序的运行机制和JVM7
1.4开发Java的准备9
1.4.1下载和安装Java 7的JDK9
学生提问 不是说JVM是运行Java程序的虚拟机吗?那JRE和JVM的关系是怎样的呢?9
学生提问 为什么不安装公共JRE呢?10
1.4.2设置PATH环境变量11
学生提问 为什么选择用户变量?用户变量与系统变量有什么区别?13
1.5第一个Java程序13
1.5.1编辑Java源代码13
1.5.2编译Java程序14
学生提问 当我们编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢?14
1.5.3运行Java程序15
1.5.4根据CLASSPATH环境变量定位类16
1.6 Java程序的基本规则17
1.6.1 Java程序的组织形式17
1.6.2 Java源文件的命名规则18
1.6.3初学者容易犯的错误19
1.7垃圾回收机制21
1.8何时开始使用IDE工具23
学生提问 我想学习Java编程,到底是学习Eclipse好呢,还是学习NetBeans好呢?23
1.9本章小结24
本章练习24
第2章 数据类型和运算符25
2.1注释26
2.1.1单行注释和多行注释27
2.1.2文档注释27
学生提问 API文档是什么?27
为什么要掌握查看API文档的方法?30
2.2标识符和关键字34
2.2.1分隔符34
2.2.2标识符规则36
2.2.3 Java关键字36
2.3数据类型分类37
2.4基本数据类型37
2.4.1整型38
2.4.2 Java 7新增的二进制整数39
2.4.3字符型40
2.4.4浮点型41
2.4.5 Java 7新增的数值中使用下画线分隔43
2.4.6布尔型43
2.5基本类型的类型转换44
2.5.1自动类型转换44
2.5.2强制类型转换45
2.5.3表达式类型的自动提升47
2.6直接量48
2.6.1直接量的类型48
2.6.2直接量的赋值48
2.7运算符49
2.7.1算术运算符50
2.7.2赋值运算符52
2.7.3位运算符53
2.7.4扩展后的赋值运算符56
2.7.5比较运算符57
2.7.6逻辑运算符58
2.7.7三目运算符59
2.7.8运算符的结合性和优先级59
2.8本章小结61
本章练习61
第3章 流程控制与数组62
3.1顺序结构63
3.2分支结构63
3.2.1 if条件语句63
3.2.2 Java 7的switch分支语句67
3.3循环结构70
3.3.1 while循环语句70
3.3.2 do while循环语句71
3.3.3 for循环72
3.3.4嵌套循环75
3.4控制循环结构76
3.4.1使用break结束循环76
3.4.2使用continue结束本次循环78
3.4.3使用return结束方法79
3.5数组类型80
3.5.1理解数组:数组也是一种类型80
学生提问 int[]是一种类型吗?怎么使用这种类型呢?80
3.5.2定义数组80
3.5.3数组的初始化81
学生提问 能不能只分配内存空间,不赋初始值呢?81
3.5.4使用数组83
学生提问 为什么要我记住这些异常信息?84
3.5.5 foreach循环84
3.6深入数组86
3.6.1内存中的数组86
学生提问 为什么有栈内存和堆内存之分?87
3.6.2基本类型数组的初始化89
3.6.3引用类型数组的初始化90
3.6.4没有多维数组93
学生提问 我是否可以让图3.13中灰色覆盖的数组元素再次指向另一个数组?这样不就可以扩展成三维数组吗?甚至扩展成更多维的数组?95
3.6.5操作数组的工具类96
3.6.6数组的应用举例97
3.7本章小结101
本章练习101
第4章 面向对象(上)102
4.1类和对象103
4.1.1定义类103
学生提问 构造器不是没有返回值吗?为什么不能用void修饰呢?106
4.1.2对象的产生和使用106
4.1.3对象、引用和指针107
4.1.4对象的 this引用108
4.2方法详解113
4.2.1方法的所属性113
4.2.2方法的参数传递机制114
4.2.3形参个数可变的方法117
4.2.4递归方法119
4.2.5方法重载120
学生提问 为什么方法的返回值类型不能用于区分重载的方法?121
4.3成员变量和局部变量122
4.3.1成员变量和局部变量122
4.3.2成员变量的初始化和内存中的运行机制126
4.3.3局部变量的初始化和内存中的运行机制128
4.3.4变量的使用规则128
4.4隐藏和封装130
4.4.1理解封装130
4.4.2使用访问控制符130
4.4.3 package、import和import static134
4.4.4 Java的常用包139
4.5深入构造器140
4.5.1使用构造器执行初始化140
学生提问 构造器是创建Java对象的途径,是不是说构造器完全负责创建Java对象?141
4.5.2构造器重载141
学生提问 为什么要用this来调用另一个重载的构造器?我把另一个构造器里的代码复制、粘贴到这个构造器里不就可以了吗?143
4.6类的继承143
4.6.1继承的特点144
4.6.2重写父类的方法145
4.6.3 super限定146
4.6.4调用父类构造器149
学生提问 为什么我创建Java对象时从未感觉到java.lang.Object类的构造器被调用过?152
4.7多态152
4.7.1多态性152
4.7.2引用变量的强制类型转换154
4.7.3 instanceof运算符155
4.8继承与组合156
4.8.1使用继承的注意点156
4.8.2利用组合实现复用158
学生提问 使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大?161
4.9初始化块161
4.9.1使用初始化块161
4.9.2初始化块和构造器163
4.9.3静态初始化块164
4.10本章小结167
本章练习167
第5章 面向对象(下)168
5.1 Java 7增强的包装类169
学生提问 Java为什么要对这些数据进行缓存呢?173
5.2处理对象173
5.2.1打印对象和toString方法174
5.2.2=和equals方法175
学生提问 判断obj是否为Person类的实例时,为何不用obj instanceof Person来判断呢?179
5.3类成员180
5.3.1理解类成员180
5.3.2单例(Singleton)类181
5.4 final修饰符182
5.4.1 final成员变量182
5.4.2 final局部变量184
5.4.3 final修饰基本类型变量和引用类型变量的区别185
5.4.4可执行“宏替换”的final变量186
5.4.5 final方法188
5.4.6 final类189
5.4.7不可变类189
5.4.8缓存实例的不可变类193
5.5抽象类195
5.5.1抽象方法和抽象类195
5.5.2抽象类的作用198
5.6更彻底的抽象:接口200
5.6.1接口的概念200
5.6.2接口的定义201
5.6.3接口的继承202
5.6.4使用接口203
5.6.5接口和抽象类205
5.6.6面向接口编程206
5.7内部类210
5.7.1非静态内部类210
学生提问 非静态内部类对象和外部类对象的关系是怎样的?214
5.7.2静态内部类215
学生提问 为什么静态内部类的实例方法也不能访问外部类的实例属性呢?216
学生提问 接口里是否能定义内部接口?217
5.7.3使用内部类217
学生提问 既然内部类是外部类的成员,那么是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类?220
5.7.4局部内部类220
5.7.5匿名内部类221
5.7.6闭包(Closure)和回调224
5.8枚举类227
5.8.1手动实现枚举类227
5.8.2枚举类入门229
5.8.3枚举类的Field、方法和构造器230
5.8.4实现接口的枚举类233
学生提问 枚举类不是用final修饰了吗?怎么还能派生子类呢?234
5.8.5包含抽象方法的枚举类234
5.9对象与垃圾回收236
5.9.1对象在内存中的状态236
5.9.2强制垃圾回收237
5.9.3 finalize方法238
5.9.4对象的软、弱和虚引用240
5.10修饰符的适用范围244
5.11使用JAR文件245
5.11.1 jar命令详解246
5.11.2创建可执行的JAR包248
5.11.3关于JAR包的技巧249
5.12本章小结250
本章练习250
第6章 Java集合251
6.1 Java集合概述252
6.2 Collection和Iterator接口254
6.2.1使用Iterator接口遍历集合元素256
6.2.2使用foreach循环遍历集合元素258
6.3 Set集合258
6.3.1 HashSet类259
学生提问 hashCode()方法对于HashSet是不是十分重要?261
6.3.2 LinkedHashSet类264
6.3.3 TreeSet类264
6.3.4 EnumSet类271
6.3.5各Set实现类的性能分析273
6.4 List集合274
6.4.1 List接口和ListIterator接口274
6.4.2 ArrayList和Vector实现类277
6.4.3固定长度的List278
6.5 Queue集合279
6.5.1 PriorityQueue实现类280
6.5.2 Deque接口与ArrayDeque实现类280
6.5.3 LinkedList实现类282
6.5.4各种线性表的性能分析283
6.6 Map285
6.6.1 HashMap和Hashtable实现类286
6.6.2 LinkedHashMap实现类290
6.6.3使用Properties读写属性文件290
6.6.4 SortedMap接口和TreeMap实现类292
6.6.5 WeakHashMap实现类294
6.6.6 IdentityHashMap实现类295
6.6.7 EnumMap实现类296
6.6.8各Map实现类的性能分析297
6.7 HashSet和HashMap的性能选项297
6.8操作集合的工具类:Collections298
6.8.1排序操作298
6.8.2查找、替换操作302
6.8.3同步控制303
6.8.4设置不可变集合303
6.9烦琐的接口:Enumeration304
6.10本章小结305
本章练习305
第7章 泛型306
7.1泛型入门307
7.1.1编译时不检查类型的异常307
7.1.2手动实现编译时检查类型308
7.1.3使用泛型309
7.1.4 Java 7泛型的“菱形”语法309
7.2深入泛型310
7.2.1定义泛型接口、类311
7.2.2从泛型类派生子类312
7.2.3并不存在泛型类314
7.3类型通配符314
7.3.1使用类型通配符316
7.3.2设定类型通配符的上限317
7.3.3设定类型形参的上限319
7.4泛型方法320
7.4.1定义泛型方法320
7.4.2泛型方法和类型通配符的区别323
7.4.3 Java 7的“菱形”语法与泛型构造器324
7.4.4设定通配符下限325
7.4.5泛型方法与方法重载327
7.5擦除和转换328
7.6泛型与数组329
7.7本章小结331
第8章 异常处理332
8.1异常概述333
8.2异常处理机制335
8.2.1使用try…catch捕获异常335
8.2.2异常类的继承体系336
8.2.3 Java 7提供的多异常捕获339
8.2.4访问异常信息340
8.2.5使用fmally回收资源341
8.2.6异常处理的嵌套344
8.2.7 Java 7的自动关闭资源的try语句344
8.3 Checked异常和Runtime异常体系345
8.3.1使用throws声明抛出异常346
8.4使用throw抛出异常348
8.4.1抛出异常348
8.4.2自定义异常类350
8.4.3 catch和throw同时使用350
8.4.4 Java 7增强的throw语句352
8.4.5异常链353
8.5 Java的异常跟踪栈354
8.6异常处理规则357
8.6.1不要过度使用异常357
8.6.2不要使用过于庞大的try块358
8.6.3避免使用Catch All语句358
8.6.4不要忽略捕获到的异常359
8.7本章小结359
本章练习359
第9章 Annotation(注释)360
9.1基本Annotation361
9.1.1限定重写父类方法:@Override361
9.1.2标示已过时:@Deprecated362
9.1.3抑制编译器警告:@SuppressWarnings363
9.1.4 Java 7的“堆污染”警告与@SafeVarargs363
9.2 JDK的元Annotation365
9.2.1使用@Retentio365
9.2.2使用@Target366
9.2.3使用@Documented366
9.2.4使用@Inherited367
9.3自定义Annotation368
9.3.1定义Annotation368
9.3.2提取Annotation信息370
9.3.3使用Annotation的示例371
9.4编译时处理Annotation376
9.5本章小结380
第10章 输入/输出381
10.1 File类382
10.1.1访问文件和目录382
10.1.2文件过滤器384
10.2理解Java的IO流385
10.2.1流的分类386
10.2.2流的概念模型387
10.3字节流和字符流388
10.3.1 InputStream和Reader388
10.3.2 OutputStream和Writer391
10.4输入/输出流体系392
10.4.1处理流的用法392
10.4.2输入/输出流体系393
10.4.3转换流396
学生提问 怎么没有把字符流转换成字节流的转换流呢?396
10.4.4推回输入流397
10.5重定向标准输入/输出399
10.6 Java虚拟机读写其他进程的数据400
10.7 RandomAccessFile402
10.8对象序列化406
10.8.1序列化的含义和意义406
10.8.2使用对象流实现序列化407
10.8.3对象引用的序列化409
10.8.4自定义序列化413
10.8.5另一种自定义序列化机制419
10.8.6版本420
10.9 NIO421
10.9.1 Java新IO概述422
10.9.2使用Buffer422
10.9.3使用Channel426
10.9.4字符集和Charset429
学生提问 二进制序列与字符之间如何对应呢?430
10.9.5文件锁432
10.10 Java 7的NIO.2433
10.10.1 Path、Paths和Files核心API433
10.10.2使用FileVisitor遍历文件和目录435
10.10.3使用WatchService监控文件变化436
10.10.4访问文件属性437
10.11本章小结439
本章练习440
第11章 多线程441
11.1线程概述442
11.1.1线程和进程442
11.1.2多线程的优势443
11.2线程的创建和启动444
11.2.1继承Thread类创建线程类444
11.2.2实现Runnable接口创建线程类446
11.2.3使用Callable和Future创建线程447
11.2.4创建线程的三种方式对比449
11.3线程的生命周期450
11.3.1新建和就绪状态450
11.3.2运行和阻塞状态452
11.3.3线程死亡453
11.4控制线程454
11.4.1 join线程454
11.4.2后台线程455
11.4.3线程睡眠:sleep456
11.4.4线程让步:yield457
11.4.5改变线程优先级459
11.5线程同步460
11.5.1线程安全问题460
11.5.2同步代码块462
11.5.3同步方法464
11.5.4释放同步监视器的锁定466
11.5.5同步锁(Lock)467
11.5.6死锁469
11.6线程通信471
11.6.1传统的线程通信471
11.6.2使用Condition控制线程通信475
11.6.3使用阻塞队列(BlockingQueue)控制线程通信477
11.7线程组和未处理的异常481
11.8线程池483
11.8.1 Java 5实现的线程池484
11.8.2 Java 7新增的ForkJoinPool486
11.9线程相关类489
11.9.1 ThreadLocal类490
11.9.2包装线程不安全的集合492
11.9.3线程安全的集合类492
11.10本章小结494
第12章 网络编程495
12.1网络编程的基础知识496
12.1.1网络基础知识496
12.1.2 IP地址和端口号497
12.2 Java的基本网络支持498
12.2.1使用InetAddress499
12.2.2使用URLDecoder和URLEncoder499
12.2.3使用URL和URLConnection501
12.3基于TCP协议的网络编程508
12.3.1 TCP协议基础508
12.3.2使用ServerSocket创建TCP服务器端509
12.3.3使用Socket进行通信510
12.3.4加入多线程512
12.3.5记录用户信息516
12.3.6半关闭的Socket524
12.3.7使用NIO实现非阻塞Socket通信525
12.3.8使用Java 7的AIO实现非阻塞通信531
学生提问 上面程序中好像没用到④⑤号代码的get()方法的返回值,这两个地方不调用get()方法行吗?535
12.4本章小结539
本章练习539
第13章 类加载机制与反射540
13.1类的加载、连接和初始化541
13.1.1 JVM和类541
13.1.2类的加载542
13.1.3类的连接543
13.1.4类的初始化543
13.1.5类初始化的时机544
13.2类加载器546
13.2.1类加载器简介546
13.2.2类加载机制547
13.2.3创建并使用自定义的类加载器549
13.2.4 URLClassLoader类553
13.3通过反射查看类信息554
13.3.1获得Class对象554
13.3.2从Class中获取信息555
13.4使用反射生成并操作对象559
13.4.1创建对象559
13.4.2调用方法561
13.4.3访问属性值564
13.4.4操作数组565
13.5使用反射生成JDK动态代理566
13.5.1使用Proxy和InvocationHandler创建动态代理567
13.5.2动态代理和AOP569
13.6反射和泛型573
13.6.1泛型和Class类573
13.6.2使用反射来获取泛型信息575
13.7本章小结577
本章练习577