关于我们
书单推荐
新书推荐
|
Java无难事 读者对象:本书涵盖了从Java 5到Java 11的所有重要新特性,不仅适合初学Java编程的读者,也适合有一定经验的读者。
本书在内容安排上由浅入深, 在知识讲解上深入浅出, 为你节省脑细胞, 让你轻松愉快地掌握Java知识。超值的同步学习视频并不是书中内容的重复, 而是有力的补充和完善。本书还讲解了依赖注入 (IoC/DI) 容器、面向切面编程 (AOP)、对象关系映射 (ORM) 框架的实现原理, 同时还给出了并发编程领域中经常用到的线程池的实现。
孙鑫,IT技术和教育专家,2009年中国教育杰出人物。具有20多年的软件开发和教育培训经验,精通多种程序语言和技术架构。曾出版多本畅销技术专著,包括《Java Web开发详解》 《VC++深入详解》《Struts 2深入详解》《Servlet/JSP深入详解》《详解Spring Boot : 从入门到企业级开发实战》等。
第1章 Java初窥 1
1.1 Java的起源 1 1.2 Java能做什么 1 1.3 相关概念 2 1.3.1 JDK 2 1.3.2 Java家族的三个成员 2 1.3.3 Java 1、Java 2和Java 5 3 1.3.4 JRE 3 1.4 安装JDK 3 1.4.1 下载JDK 11(Java SE 11) 4 1.4.2 安装JDK 5 1.4.3 下载帮助文档 6 1.5 Java的特性 6 1.5.1 简单 6 1.5.2 面向对象 7 1.5.3 健壮 7 1.5.4 安全 7 1.5.5 结构中立 7 1.5.6 可移植 7 1.5.7 高性能 8 1.5.8 解释执行 8 1.5.9 平台无关 8 1.5.10 多线程 8 1.5.11 动态 9 1.6 Java跨平台的原理 9 1.6.1 Java源文件的编译过程 9 1.6.2 Java解释器运行机制 9 1.6.3 Java字节码的执行方式 10 1.6.4 理解JVM 10 1.7 第一个程序 11 1.7.1 了解JDK 11 1.7.2 编写第一个Java程序 11 1.8 扫清Java征途中的两块绊脚石 15 1.8.1 有用的PATH 15 1.8.2 难缠的CLASSPATH 17 1.9 交互式编程环境JShell 19 1.10 为Java程序打包 20 1.10.1 JAR文件 20 1.10.2 将字节码文件打包到 JAR包中 20 1.10.3 将目录中所有文件打包到 JAR文件中 21 1.10.4 清单文件 21 1.11 总结 22 1.12 实战练习 22 第2章 初识Java语言 23 2.1 标识符 23 2.2 数据类型 23 2.2.1 整数类型 24 2.2.2 浮点类型 25 2.2.3 字符(char)型 25 2.2.4 布尔(boolean)型 26 2.2.5 String类型 26 2.3 变量和字面常量 26 2.3.1 变量 26 2.3.2 字面常量 27 2.4 类型转换的奥秘 30 2.5 运算符 32 2.5.1 赋值运算符 32 2.5.2 自增和自减运算符 32 2.5.3 算术运算符 33 2.5.4 关系运算符 34 2.5.5 布尔运算符 34 2.5.6 位运算符 35 2.5.7 移位运算符 37 2.5.8 一元和二元运算符 39 2.5.9 三元运算符 39 2.5.10 优先级 39 2.6 表达式与语句 40 2.7 程序结构 40 2.7.1 分支语句 41 2.7.2 循环语句 46 2.8 数组 54 2.8.1 数组类型与声明数组 54 2.8.2 创建数组 55 2.8.3 使用数组 56 2.8.4 匿名数组 57 2.8.5 多维数组 57 2.8.6 数组的初始值和越界 59 2.9 分隔符 60 2.10 注释 60 2.10.1 传统注释 60 2.10.2 JavaDoc注释 61 2.11 Java中的关键字 63 2.12 总结 63 2.13 实战练习 63 第3章 进入对象的世界 65 3.1 面向对象思想 65 3.2 对象的状态和行为 66 3.2.1 对象都有一组固定的行为 66 3.2.2 注意思维习惯 66 3.3 面向对象编程的难点 67 3.4 Java的类与对象 67 3.5 字段(field)与方法 68 3.5.1 字段 68 3.5.2 方法 68 3.5.3 方法的参数与返回值 69 3.6 构造方法与new关键字 71 3.7 方法重载 74 3.8 特殊变量this 75 3.9 关键字static 79 3.9.1 静态字段 79 3.9.2 静态方法 81 3.9.3 static语句块 82 3.10 常量 82 3.11 枚举(enum) 83 3.11.1 原始的枚举实现 83 3.11.2 枚举类型 84 3.11.3 枚举值的比较 86 3.11.4 自定义枚举值 86 3.12 总结 87 3.13 实战练习 87 第4章 高级面向对象编程 88 4.1 继承 88 4.2 方法的覆盖(override) 90 4.3 多态(polymorphism) 91 4.3.1 何为多态 91 4.3.2 多态的实际应用 92 4.3.3 Java编译器如何实现多态 94 4.3.4 类型转换 94 4.3.5 协变返回类型 96 4.3.6 在构造方法中调用被覆盖的 方法 97 4.4 特殊变量super 98 4.4.1 访问父类被子类覆盖的方法或 隐藏的变量 98 4.4.2 调用父类构造方法 100 4.5 封装与private 103 4.6 对外发布的接口――public 107 4.7 再谈final 109 4.7.1 final类 109 4.7.2 final方法 109 4.7.3 final参数 110 4.8 对象的销毁 110 4.9 面向对象的四个基本特性 111 4.10 总结 112 4.11 实战练习 112 第5章 包和访问控制 114 5.1 在包中的类 114 5.2 导入类 117 5.3 静态导入 119 5.4 静态导入枚举类型 120 5.5 访问控制 121 5.5.1 类的访问说明符 121 5.5.2 类成员的访问说明符 122 5.6 总结 126 5.7 实战练习 126 第6章 抽象类与接口 127 6.1 抽象方法和抽象类 127 6.2 接口 131 6.3 接口中的数据成员 133 6.4 接口的继承与实现 133 6.5 接口的应用 135 6.6 深入接口――通信双方的协议 137 6.7 接口的默认方法和静态方法 139 6.7.1 默认方法 139 6.7.2 静态方法 144 6.8 接口的私有方法 145 6.9 总结 146 6.10 实战练习 147 第7章 内部类(Inner Class) 149 7.1 创建内部类 149 7.2 访问外部类 150 7.3 内部类与接口 153 7.4 局部内部类 155 7.5 匿名内部类 157 7.5.1 创建匿名内部类 157 7.5.2 匿名内部类的构造方法 159 7.6 静态内部类 160 7.7 内部类的继承与覆盖 161 7.7.1 内部类的继承 161 7.7.2 内部类的覆盖 162 7.8 内部类规则总结 163 7.9 回调与事件机制 163 7.9.1 回调(callback) 163 7.9.2 事件(event) 167 7.10 总结 169 7.11 实战练习 169 第8章 异常处理 170 8.1 什么是异常 170 8.2 捕获异常 172 8.3 使用finally进行清理 175 8.4 抛出异常与声明异常 179 8.5 RuntimeException 182 8.6 创建自己的异常体系结构 184 8.7 try-with-resources 188 8.7.1 自动关闭资源 188 8.7.2 声明多个资源 189 8.7.3 catch多个异常 191 8.7.4 使用更具包容性的类型 检查重新抛出异常 192 8.8 总结 193 8.9 实战练习 193 第9章 深入字符串 194 9.1 String类 194 9.2 ==运算符与equals方法 194 9.3 compareTo方法 197 9.4 字符串拼接 198 9.5 操作字符串 198 9.5.1 获取字符串的长度 199 9.5.2 查找字符或字符串 199 9.5.3 判断字符串的开始与结尾 200 9.5.4 获取指定索引位置的字符 200 9.5.5 截取子字符串 201 9.5.6 分割字符串 201 9.5.7 替换字符或字符串 202 9.5.8 合并字符串 203 9.5.9 重复字符串 203 9.5.10 大小写转换 203 9.5.11 去除字符串首尾空白 204 9.5.12 判断字符串是否为空 204 9.5.13 提取字符串的行流 205 9.5.14 与字节数组相互转换 205 9.6 StringBuffer类和 StringBuilder类 206 9.7 格式化输出 207 9.7.1 格式说明符 208 9.7.2 参数索引 208 9.7.3 格式说明字符 208 9.7.4 宽度和精度 209 9.7.5 标志字符 210 9.7.6 生成格式化的String对象 211 9.8 正则表达式 211 9.8.1 正则表达式的优点 211 9.8.2 一切从模式开始 213 9.8.3 创建正则表达式 213 9.8.4 量词 216 9.8.5 String类的正则表达式方法 216 9.8.6 Pattern和Matcher 218 9.8.7 邮件地址验证 218 9.8.8 获取组匹配的内容 220 9.8.9 替换字符串 221 9.9 总结 221 9.10 实战练习 222 第10章 Java应用 223 10.1 再论引用类型 223 10.1.1 引用类型――数组 223 10.1.2 方法传参 225 10.2 操作数组 226 10.2.1 数组的复制 226 10.2.2 数组的排序 229 10.2.3 搜索数组中的元素 232 10.2.4 填充数组 233 10.3 基本数据类型与封装类 234 10.3.1 基本数据类型与封装类 对象的互相转换 235 10.3.2 封装类对象与字符串的 互相转换 236 10.3.3 基本数据类型与字符串的 互相转换 236 10.3.4 自动装箱与拆箱 236 10.4 对象的克隆 237 10.5 国际化与本地化 242 10.5.1 Locale 242 10.5.2 资源包 244 10.5.3 消息格式化 248 10.6 总结 249 10.7 实战练习 249 第11章 泛型 250 11.1 为什么需要泛型 250 11.2 泛型与基本数据类型 253 11.3 泛型类中的数组 254 11.4 元组 256 11.5 泛型接口 258 11.5.1 一个简单的泛型接口 258 11.5.2 匿名内部类实现泛型接口 259 11.5.3 map机制的实现 260 11.6 泛型方法 262 11.6.1 简单的泛型方法 262 11.6.2 完善映射机制的实现 263 11.7 通配符类型 264 11.7.1 通配符的子类型限定 266 11.7.2 通配符的超类型限定 267 11.8 类型参数的限定 269 11.9 深入泛型机制 270 11.10 泛型的一些问题 272 11.10.1 接口的二次实现 272 11.10.2 方法重载 273 11.10.3 泛型类型的实例化 273 11.10.4 异常 274 11.11 使用泛型的限制 275 11.12 类型参数的命名约定 275 11.13 总结 275 11.14 实战练习 276 第12章 Lambda表达式 277 12.1 理解Lambda表达式 277 12.2 Lambda表达式的语法 278 12.3 函数式接口 279 12.4 内置函数式接口 280 12.5 方法引用 281 12.6 构造方法引用 282 12.7 数组引用 284 12.8 总结 284 12.9 实战练习 284 第13章 集合类 285 13.1 集合框架中的接口与实现类 285 13.1.1 集合框架中的接口 286 13.1.2 集合框架中的实现类 286 13.1.3 Collection类型的集合 286 13.1.4 Map类型的集合 288 13.2 迭代 289 13.2.1 Iterator接口 289 13.2.2 迭代器与“for each”循环 291 13.2.3 新增的forEach方法 292 13.2.4 ListIterator接口 293 13.2.5 迭代与回调 295 13.3 数据结构简介 296 13.3.1 链表 296 13.3.2 栈 299 13.3.3 队列 299 13.4 List 299 13.4.1 ArrayList 300 13.4.2 LinkedList 303 13.4.3 List集合类的性能 306 13.5 Set 309 13.5.1 HashSet 309 13.5.2 TreeSet 314 13.5.3 LinkedHashSet 315 13.5.4 Set集合类的性能 316 13.6 Queue 317 13.6.1 Queue接口 317 13.6.2 PriorityQueue类 318 13.6.3 Deque接口 319 13.7 Collections类 320 13.7.1 排序集合中的元素 320 13.7.2 获取最大和最小元素 322 13.7.3 在集合中搜索 323 13.7.4 获取包装器集合 324 13.8 再探Comparator接口 325 13.9 深入Map类型 328 13.9.1 Map接口 328 13.9.2 Map的工作原理 329 13.9.3 HashMap 331 13.9.4 TreeMap 332 13.9.5 LinkedHashMap 333 13.9.6 Map性能测试 334 13.10 遗留的集合 336 13.10.1 Enumeration接口 336 13.10.2 Vector类 336 13.10.3 Stack类 337 13.10.4 Hashtable类 337 13.10.5 Properties类 337 13.10.6 BitSet类 339 13.11 集合工厂方法 340 13.11.1 of方法 340 13.11.2 copyOf方法 341 13.12 总结 342 13.13 实战练习 342 第14章 Stream 344 14.1 什么是Stream 344 14.2 创建流 345 14.3 并行流与串行流 348 14.4 有序流和无序流 348 14.5 中间操作 348 14.5.1 筛选和截断 349 14.5.2 映射 351 14.5.3 排序 352 14.5.4 peek 353 14.6 终端操作 354 14.6.1 遍历 354 14.6.2 查找与匹配 355 14.6.3 最大/最小与计数 356 14.6.4 收集统计信息 357 14.6.5 reduce 357 14.6.6 collect 361 14.7 并行流的性能 366 14.8 总结 368 14.9 实战练习 369 第15章 Class类与反射API 370 15.1 Class<T>类 370 15.2 获取类型信息 372 15.2.1 获取方法和字段信息 372 15.2.2 获取基类和接口信息 374 15.2.3 获取枚举信息 375 15.2.4 获取泛型信息 376 15.2.5 获取注解信息 379 15.3 检测类型 379 15.4 使用Class和反射创建类的 对象 380 15.5 使用反射调用对象的方法 383 15.6 使用反射修改对象的字段 384 15.7 依赖注入容器 385 15.8 动态代理 391 15.9 ClassLoader 395 15.9.1 类加载器的分类 396 15.9.2 类加载器的加载机制 397 15.9.3 自定义类加载器 398 15.10 适可而止 400 15.11 方法句柄 401 15.12 服务加载器 403 15.13 总结 407 15.14 实战练习 407 第16章 注解(Annotation) 408 16.1 预定义的注解 408 16.1.1 @Override 408 16.1.2 @Deprecated 409 16.1.3 @SuppressWarnings 410 16.1.4 @SafeVarargs 411 16.1.5 @FunctionalInterface 412 16.2 自定义注解 412 16.3 元注解 413 16.3.1 @Documented 414 16.3.2 @Retention 414 16.3.3 @Target 415 16.3.4 @Inherited 416 16.3.5 @Repeatable 416 16.4 注解与反射 417 16.5 编写注解处理器 421 16.5.1 依赖注入容器的注解实现 421 16.5.2 使用注解生成数据库表 423 16.6 总结 428 16.7 实战练习 428 第17章 多线程 429 17.1 基本概念 429 17.1.1 程序和进程 429 17.1.2 线程 429 17.2 Java对多线程的支持 430 17.3 Java线程 430 17.3.1 Thread类 431 17.3.2 创建任务 432 17.3.3 让步 433 17.3.4 休眠 434 17.3.5 优先级 436 17.3.6 加入一个线程 437 17.3.7 捕获线程的异常 438 17.3.8 后台线程 440 17.3.9 线程组 442 17.3.10 线程的状态 442 17.4 线程同步 443 17.4.1 错误地访问共享资源 444 17.4.2 同步语句块 445 17.4.3 同步方法 446 17.4.4 死锁 448 17.5 线程本地存储 450 17.5.1 使用ThreadLocal类 450 17.5.2 ThreadLocal的实现原理 452 17.6 生产者与消费者 453 17.7 线程的终止 458 17.7.1 取消一个任务 458 17.7.2 在阻塞中中止 459 17.7.3 注意清理 461 17.8 线程池 462 17.9 总结 474 17.10 实战练习 475 第18章 Java常用工具类 476 18.1 java.lang.Math类 476 18.2 随机数 479 18.2.1 Math.random方法 479 18.2.2 Random类 480 18.2.3 ThreadLocalRandom类 481 18.3 大数字运算 482 18.3.1 BigInteger 482 18.3.2 BigDecimal 486 18.4 日期时间工具 491 18.4.1 Date类 492 18.4.2 DateFormat类 493 18.4.3 SimpleDateFormat类 495 18.4.4 Calendar类 497 18.5 Java 8新增的日期/时间API 499 18.5.1 新的日期/时间类 500 18.5.2 构造日期/时间对象 500 18.5.3 格式化和解析日期/时间 字符串 501 18.5.4 操作日历字段 502 18.5.5 计算时间间隔 503 18.5.6 使用Instant计算某项操作 花费的时间 504 18.5.7 判断闰年 504 18.5.8 与Date和Calendar的 相互转换 505 18.6 Optional类 506 18.6.1 创建Optional类的实例 506 18.6.2 判断Optional的值是否 存在 506 18.6.3 获取Optional的值 507 18.6.4 过滤与映射 508 18.6.5 得到Stream对象 508 18.6.6 为什么要使用Optional 509 18.6.7 OptionalInt、OptionalLong和OptionalDouble 512 18.7 Base64编解码 512 18.8 Timer类 514 18.9 Runtime类与单例设计模式 516 18.10 总结 518 18.11 实战练习 518 第19章 Java I/O操作 519 19.1 File类 519 19.1.1 分隔符 519 19.1.2 创建文件夹 520 19.1.3 文件操作 520 19.1.4 搜索目录中的文件 521 19.1.5 移动文件 524 19.1.6 临时文件 525 19.2 流式I/O 526 19.3 输入输出流 527 19.3.1 InputStream 527 19.3.2 OutputStream 528 19.3.3 字节数组输入/输出流 529 19.3.4 文件输入/输出流 530 19.3.5 过滤流 532 19.3.6 缓冲的输入/输出流 532 19.3.7 数据输入/输出流 534 19.3.8 管道流 535 19.3.9 复制文件 537 19.4 Java I/O库的设计原则 537 19.5 Reader和Writer 538 19.6 InputStreamReader和OutputStreamWriter 540 19.7 字符集与中文乱码问题 542 19.7.1 字符集 542 19.7.2 对乱码产生过程的分析 547 19.7.3 Charset类 549 19.8 RandomAccessFile类 551 19.9 标准I/O 552 19.9.1 从标准输入中读取数据 553 19.9.2 Scanner 553 19.9.3 I/O重定向 556 19.10 对象序列化 557 19.10.1 使用对象流实现序列化 558 19.10.2 对象引用的序列化 560 19.10.3 序列化过滤器 564 19.10.4 定制序列化 566 19.10.5 替换对象 568 19.10.6 使用Externalizable接口 定制序列化 571 19.10.7 序列化版本 573 19.11 NIO 573 19.11.1 缓冲区(Buffer) 574 19.11.2 通道(Channel) 579 19.11.3 使用通道复制文件 581 19.11.4 视图缓冲区 583 19.11.5 字节顺序 585 19.11.6 直接和非直接缓冲区 586 19.11.7 分散和聚集 587 19.11.8 字符缓冲区的问题 590 19.11.9 内存映射文件 593 19.11.10 对文件加锁 598 19.11.11 管道 599 19.12 Files类与Path接口 601 19.12.1 Path接口 601 19.12.2 读写文件 603 19.12.3 遍历目录 606 19.12.4 小结 608 19.13 异步文件通道 608 19.13.1 写入数据 609 19.13.2 读取数据 611 19.14 总结 613 19.15 实战练习 613 第20章 Java并发编程 615 20.1 Callable和Future接口 615 20.2 新的任务执行框架 617 20.2.1 Executor接口 617 20.2.2 ExecutorService接口 617 20.2.3 Executors工具类 618 20.2.4 ThreadFactory 620 20.2.5 ScheduledExecutorService 621 20.2.6 批量执行任务 623 20.2.7 CompletionService接口 625 20.2.8 ThreadPoolExecutor类 628 20.3 锁对象 631 20.3.1 Lock接口 631 20.3.2 重入互斥锁 632 20.3.3 读写锁 633 20.3.4 StampedLock 635 20.4 条件对象 639 20.5 同步工具类 642 20.5.1 CountDownLatch 642 20.5.2 CyclicBarrier 644 20.5.3 Semaphore 646 20.5.4 Exchanger 650 20.6 线程安全的集合 652 20.6.1 写时拷贝 653 20.6.2 阻塞队列 654 20.6.3 延迟队列 657 20.6.4 传输队列 660 20.6.5 ConcurrentHashMap 660 20.6.6 ConcurrentSkipListMap 662 20.7 Fork/Join框架 663 20.8 CompletableFuture 666 20.8.1 异步执行任务 666 20.8.2 构造异步任务链 667 20.8.3 结果转换 668 20.8.4 组合异步任务 669 20.8.5 任务链完成时的结果处理和异常处理 670 20.9 原子操作 675 20.9.1 AtomicInteger类 676 20.9.2 LongAdder 679 20.10 变量句柄 680 20.11 总结 683 20.12 实战练习 683 第21章 Eclipse开发工具 684 21.1 Eclipse简介 684 21.2 下载并安装 684 21.3 Eclipse开发环境介绍 686 21.4 配置Eclipse 690 21.4.1 配置JDK 690 21.4.2 配置字体 691 21.4.3 配置和使用快捷键 692 21.4.4 配置字符集 693 21.5 开发Java程序 693 21.6 调试代码 696 21.7 JUnit单元测试 698 21.8 导入现有的Eclipse项目 702 21.9 总结 703 21.10 实战练习 703 第22章 图形界面编程 704 22.1 AWT 704 22.1.1 第一个AWT应用程序 705 22.1.2 关闭窗口 706 22.1.3 向窗口内添加组件 708 22.2 布局管理器 709 22.2.1 BorderLayout 709 22.2.2 FlowLayout 711 22.2.3 GridLayout 713 22.2.4 CardLayout 714 22.2.5 GridBagLayout 714 22.2.6 组合多个布局管理器 716 22.3 事件模型 718 22.3.1 按钮点击事件的处理 719 22.3.2 事件监听器 720 22.3.3 观察者模式 721 22.4 Swing 724 22.4.1 基本的框架窗口 724 22.4.2 添加文本域和菜单栏 725 22.4.3 菜单功能 727 22.4.4 弹出菜单 730 22.5 Swing与并发 731 22.6 使用WindowBuilder快速 开发图形界面程序 733 22.6.1 安装WindowBuilder 734 22.6.2 用户登录界面 735 22.6.3 注册事件监听器 739 22.7 总结 741 22.8 实战练习 741 第23章 Java网络编程 742 23.1 网络基础知识 742 23.1.1 计算机网络 742 23.1.2 IP地址 743 23.1.3 协议 743 23.1.4 网络的状况 743 23.1.5 网络异质性问题的解决 744 23.1.6 ISO/OSI七层参考模型 744 23.1.7 数据封装 746 23.1.8 TCP/IP模型 747 23.1.9 端口 747 23.1.10 套接字(Socket) 748 23.1.11 客户机/服务器模式 748 23.2 基于TCP的套接字编程 748 23.2.1 服务器程序 749 23.2.2 客户端程序 751 23.2.3 多线程的服务器程序 752 23.2.4 套接字超时 753 23.3 基于UDP的套接字编程 754 23.3.1 接收端 755 23.3.2 发送端 756 23.3.3 获取发送端的信息 757 23.4 非阻塞的套接字编程 757 23.4.1 SocketChannel 757 23.4.2 ServerSocketChannel 758 23.4.3 Selector 758 23.4.4 非阻塞的服务器程序 760 23.4.5 非阻塞的客户端程序 763 23.5 URL和URLConnection 764 23.5.1 URL类 764 23.5.2 URLConnection类 765 23.5.3 一个实用的下载程序 765 23.6 HTTP Client API 768 23.6.1 HttpClient 769 23.6.2 HttpRequest 770 23.6.3 HttpResponse 772 23.6.4 异步发送多个请求 773 23.6.5 启用HttpClient的日志 记录功能 774 23.7 总结 775 23.8 实战练习 775 第24章 数据库访问 776 24.1 JDBC驱动程序的类型 776 24.1.1 JDBC-ODBC桥 777 24.1.2 部分本地API的Java 驱动程序 777 24.1.3 JDBC网络纯Java 驱动程序 778 24.1.4 本地协议的纯Java 驱动程序 778 24.2 安装数据库 778 24.3 下载MySQL JDBC驱动 782 24.4 JDBC API 783 24.5 加载并注册数据库驱动 783 24.5.1 Driver接口 783 24.5.2 加载与注册JDBC驱动 784 24.5.3 服务加载 786 24.6 建立到数据库的连接 788 24.7 访问数据库 789 24.7.1 Statement 789 24.7.2 ResultSet 792 24.7.3 PreparedStatement 796 24.7.4 CallableStatement 798 24.7.5 元数据 799 24.8 事务处理 802 24.9 可滚动和可更新的结果集 806 24.9.1 可滚动的结果集 806 24.9.2 可更新的结果集 807 24.10 行集 808 24.10.1 行集的标准实现 808 24.10.2 行集的事件模型 809 24.10.3 CachedRowSet 810 24.11 JDBC数据源和连接池 811 24.12 总结 812 24.13 实战练习 813 第25章 Java平台模块系统 814 25.1 Java平台的模块 814 25.2 模块的物理结构 816 25.3 创建模块 817 25.4 模块依赖 818 25.5 导出包 819 25.6 可传递的模块与静态依赖 821 25.7 开放包 821 25.8 限定导出和开放 824 25.9 服务加载 824 25.10 未命名模块 825 25.11 自动模块 826 25.12 为什么要引入模块系统 827 25.13 总结 828 25.14 实战练习 828
你还可能感兴趣
我要评论
|