科技>计算机>编程语言
Java面向对象编程(第2版)

Java面向对象编程(第2版)"

作者:孙卫琴
ISBN:9787121303142
定价:¥89.0
字数:1203千字
页数:752
出版时间:2017-01
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书采用由浅入深、与实际应用紧密结合的方式,利用大量经典实用的实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。本书的实例都基于最新的JDK8版本。本书的最大特色是以6条主线贯穿书:面向对象编程思想、Java语言的语法、Java虚拟机执行Java程序的原理、在实际项目中的运用、设计模式和性能优化技巧。另外,本书还贯穿了Oracle公司的OCJP(Oracle Certified Java Programmer)认证的考试要点。

前言

Java语言的特点 Java应用如此广泛是因为Java具有多方面的优势。其特点如下: (1)面向对象。Java自诞生之时就被设计成面向对象的语言,而C++语言是一种强制面向对象的语言。面向对象可以说是Java最重要的特性,它不支持类似C语言那样的面向过程的程序设计技术。Java支持静态和动态风格的代码重用。 (2)跨平台。对于Java程序,不管是Windows平台还是UNIX平台或是其他平台,它都适用。Java编辑器把Java源程序编译成与体系结构无关的字节码指令,只要安装了Java运行系统,Java程序就可在任意的处理器上运行。这些字节码指令由Java虚拟机来执行,Java虚拟机的解释器得到字节码后,对它进行转换,使之能够在不同的平台运行。 (3)直接支持分布式的网络应用。除了支持基本的语言功能,Java核心类库还包括一个支持HTTP、SMTP和FTP等基于TCP/IP协议的类库。因此,Java应用程序可凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。在Java出现以前,为分布式环境尤其是Internet提供动态的内容无疑是一项非常宏伟、难以想象的任务,但Java的语言特性却使我们很容易地达到了这个目标。 (4)安全性和健壮性。Java致力于检查程序在编译和运行时的错误,类型检查帮助检查出许多开发早期出现的错误。Java 支持自动内存管理,这不但让程序员减轻了许多负担,也减少了程序员犯错的机会。Java自己操纵内存减少了内存出错的可能性。Java还能够检测数组边界,避免了覆盖数据的可能。在Java语言里,指针和释放内存等功能均被抛弃,从而避免了非法内存操作的危险。 以上特点,是C++语言及其他语言无法比拟的(C++语言尽管也是面向对象的,但并不是严格意义上的面向对象的语言)。单从面向对象的特性来看,Java类似于SmallTalk,但其他特性,尤其是适用于分布式计算环境的特性远远超越了SmallTalk。Java发展到现在,已经不仅仅是一种语言,可以说是一种技术,这个技术涉及网络和编程等领域。另外,Java是非常简单、高效的,有调查数据发现:用C++和Java来做一个相同功能的项目,用 Java写的程序要比用C++写的程序节省60%的代码和66%的时间。可以说,用Java语言编程时间短、功能强,编程人员接手起来更容易、更简便。 本书的组织结构和主要内容 本书以6条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机执行Java程序的原理、在实际项目中的运用、设计模式和性能优化技巧。书的每一章都会围绕若干条主线来展开内容,并且根据全书的布局,合理安排每一章内容的深度。本书主要内容包括:面向对象开发方法概述、第一个Java应用、数据类型和变量、操作符、流程控制、继承、Java语言中的修饰符、接口、异常处理、类的生命周期、对象的生命周期、内部类、多线程、数组、Java集合、泛型、Lambda表达式、输入与输出(I/O)、图形用户界面、常用Swing组件、Java常用类和Annotation注解。 这本书是否适合您 在如今的Java领域,各种新技术、新工具层出不穷,一方面,每一种技术都会不停地升级换代,另一方面,还会不断涌现出新的技术和工具。Java世界就像小时候玩的万花筒,尽管实质上只是由几个普通的玻璃碎片组成的,但只要轻轻一摇,就会变化出千万种缤纷的图案。Java世界如此变化多端,很容易让初学Java的人有无从下手的感觉。常常会有读者问我这样的问题: 我学了Java已经一年多了,现在就只能用JSP写点东西,其他的东西实在太多了,我整天学都学不完,很迷茫,不知道该如何有针对性地去学,以找到一份Java工作,现在是困死在Java里了。 撰写本书,目的之一是为了帮助读者看清Java万花筒的本质,从复杂的表象中寻找普遍的规律,深刻理解Java的核心思想,只有掌握了普遍的规律与核心思想,才能以不变应万变,轻轻松松地把握Java技术发展的新趋势,迅速地领略并且会熟练运用一门新的技术,而不成为被动的追随者,知其然而不知其所以然。 阅读本书,读者对Java的领悟将逐步达到以下境界: 熟悉Java语法,熟练地编译和调试程序。 按照面向对象的思想来快速理解JDK类库,以及其他第三方提供的类库,通过阅读JavaDoc和相关文档,知道如何正确地使用这些类库。 按照面向对象的思想来分析问题领域,设计对象模型。 在开发过程中会运用现有的一些优秀设计模式,提高开发效率。 当一个方法有多种实现方式时,能够从可维护、可重用及性能优化的角度选择最佳的实现方式。 理解Java虚拟机执行Java程序的原理,从而更深入地理解Java语言的各种特性和语法规则。 本书的技术支持网站 本书的技术支持网站为:www.javathinker.net。读者可以在该网站交流Java技术,提出本书的勘误信息,作者会在本网站为读者答疑。本书中实例源文件及思考题答案的下载网址为:www.javathinker.net/download.htm。 致谢 本书在编写过程中得到了Oracle公司在技术上的大力支持,电子工业出版社少儿与艺术分社负责编辑审核。此外,复旦软件学院的戴开宇等老师为本书的编写提供了有益的帮助,JavaThinker.net网站的网友们为本书的升级提供了许多宝贵建议,在此表示衷心的感谢!尽管我们尽了最大努力,但本书难免会有不妥之处,欢迎各界专家和读者朋友批评指正。

目录

第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 finally语句:任何情况下 必须执行的代码 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 对象的finalize()方法的 特点 355 11.4.5 比较finalize()方法和finally 代码块 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 函数式接口 (FunctionalInterface) 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 随机访问文件类: RandomAccessFile 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.file类库来操作 文件系统 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 DateFormat类 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

作者简介

孙卫琴,知名IT作家和Java专家,毕业于上海交通大学,随后主要从事基于Java的软件开发工作,在此其间还从事Java方面的培训和咨询工作。2002年开始Java技术领域的创作,文风清晰严谨、深入浅出,深受读者欢迎,其多部作品的销量在同类书籍中一度位居全国榜首。代表著作有:__eol__<>__eol__<>__eol__<>__eol__<>__eol__<<精通Hibernate: Java对象持久化技术详解>> __eol__<<精通Struts: 基于MVC的Java Web设计与开发>> __eol__<> __eol__<>__eol____eol__作者的技术支持网址为:www.javathinker.net__eol__

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个