编辑推荐
《Java 8编程参考官方教程(第9版)》是对Java语言的全面指导,描述了它的语法、关键字以及基本的编程原则,另外还介绍了Java API库的重要部分。本书分为5部分,每部分关注Java开发环境的不同方面。
第Ⅰ部分是对Java语言的深入辅导。该部分从基础知识开始讲解,包括数据类型、运算符、控制语句以及类等。然后本部分介绍继承、包、接口、异常处理以及多线程。之后介绍注解、枚举、自动装箱以及泛型等内容。本部分还介绍了I/O以及applet。本部分最后一章介绍了lambda表达式。刚才介绍过,lambda表达式是Java SE 8中重要的新增特性。
第Ⅱ部分介绍Java标准API库的关键内容。本部分的主题包括字符串、I/O、网络、标准实用工具、集合框架、applet、AWT、事件处理、图像、并发编程(包括Fork/Join框架)、正则表达式和新增的流库。
第Ⅲ部分用三章内容介绍Swing。
第IV部分用三章内容介绍JavaFX。
第V部分包含两章,这两章展示了Java的实际应用。本部分的第37章介绍了Java Bean,第38章介绍了servlet。
在线资源
请记住,本书中全部示例程序的源代码都可以免费下载。
内容简介
《Java 8编程参考官方教程(第9版)》针对Java SE 8做了全面更新,介绍了如何开发、编译、调试和运行Java程序。畅销书作者Herbert Schildt撰写过众多经典的计算机编程图书。在本书中,他详尽地讲解了Java语言,包括Java的语法、关键字和基本编程原则,以及Java API库的主要内容。另外,本书还介绍了Java Bean、servlet、applet和Swing,并通过真实案例展示了Java语言的应用。《Java 8编程参考官方教程(第9版)》对Java SE 8的新特性也进行了深入讲解,包括lambda表达式、流库和默认接口方法,书末介绍的JavaFX知识为深入学习打下了坚实基础。
主要内容
● 数据类型、变量、数组和运算符
● 控制语句
● 类、对象和方法
● 方法重载和重写
● 继承
● 接口和包
● 异常处理
● 多线程编程
● 枚举、自动装箱和注解
● I/O类
● 泛型
● lambda表达式
● 字符串处理
● 集合框架
● 联网
● 事件处理
● AWT和Swing
● 并发API
● 流API
● 正则表达式
● JavaFX
● Java Bean
● applet和servlet
作者简介
Herbert Schildt,世界顶端程序设计大师,全球顶端编程图书作者之一。他是C、C++、Java和C#编程语言方面的专业,也是Windows编程方面的专家。他的编程书籍在全球销量已经超过300万册,并被翻译成多种语言流传于世,包括Java:The CompleteReference 、C++:The Complete Reference 、C: The Complete Reference 等。
目录
第Ⅰ部分 Java 语言第1章 Java的历史和演变1.1 Java的家世1.1.1 现代编程语言的诞生:C语言1.1.2 C++:下一个阶段1.1.3 Java出现的时机已经成熟1.2 Java的诞生1.3 Java改变Internet的方式1.3.1 Java1.3.2 安全性1.3.3 可移植性1.4 Java的魔力:字节码1.5 servlet:服务器端的1.6 Java的关键特性1.6.1 简单性1.6.2 面向对象1.6.3 健壮性1.6.4 多线程1.6.5 体系结构中立1.6.6 解释执行和高性能1.6.7 分布式1.6.8 动态性1.7 Java的演变历程1.8 Java1.9 文化革新第2章 Java综述2.1 面向对象编程2.1.1 两种范式2.1.2 抽象2.1.3 OOP三原则2.2第一个简单程序2.2.1 输入程序2.2.2 编译程序2.2.3 深入分析第一个示例程序2.3第二个简短程序2.4 两种控制语句2.4.1 if语句2.4.2 for循环2.5 使用代码块2.6 词汇问题2.6.1 空白符2.6.2 标识符2.6.3 字面值2.6.4 注释2.6.5 分隔符2.6.6 Java关键字2.7 Java类库第3章 数据类型、变量和数组3.1 Java是强类型化的语言3.2 基本类型3.3 整型3.3.13.3.23.3.3.3.43.4 浮点型3.4.13.4.23.5 字符型3.6 布尔型3.7 深入分析字面值3.7.1 整型字面值3.7.2 浮点型字面值3.7.3 布尔型字面值3.7.4 字符型字面值3.7.5 字符串字面值3.8 变量3.8.1 变量的声明3.8.2 动态初始化3.8.3 变量的作用域和生存期3.9 类型转换和强制类型转换3.9.1 Java的自动类型转换3.9.2 强制转换不兼容的类型3.10 表达式中的自动类型提升3.11 数组3.11.1 一维数组3.11.2 多维数组3.11.3 另一种数组声明语法3.12 关于字符串的一些说明3.13 向C/C++程序员提供指针方面的说明第4章 运算符4.1 算术运算符4.1.1 基本算术运算符4.1.2 求模运算符4.1.3 算术与赋值复合运算符4.1.4 自增与自减运算符4.2 位运算符4.2.1 位逻辑运算符4.2.2 左移4.2.3 右移4.2.4 无符号右移4.2.5 位运算符与赋值的组合4.3 关系运算符4.4 布尔逻辑运算符4.5 赋值运算符4.6 “?”运算符4.7 运算符的优先级4.8 使用圆括号第5章 控制语句5.1 Java的选择语句19.18.2 java.util.fun19.18.3 java.uti19.18.4 java.util.lo19.18.5 java.util.19.18.6 java.util.19.18.7 java.uti19.18.8 java.util.s19.18.9 java.uti第20章 输入/输出:探究ja20.1 I/O类和接口20.2 File类20.2.1 目录20.2.2 使用FilenameFilter接口20.2.3 listFiles()方法20.2.4 创建目录20.3 AutoCloseable、Closeable和Flushable接口20.4 I/O异常20.5 关闭流的两种方式20.6 流类20.7 字节流20.7.1 InputStream类20.7.2 OutputStream类20.7.3 FileInputStream类20.7.4 FileOutputStream类20.7.5 ByteArrayInputStream类20.7.6 ByteArrayOutputStream类20.7.7 过滤的字节流20.7.8 缓冲的字节流20.7.9 SequenceInputStream类20.7.10 PrintStream类20.7.11 DataOutputStream和DataInputStream类20.7.12 RandomAccessFile类20.8 字符流20.8.1 Reader类20.8.2 Writer类20.8.3 FileReader类20.8.4 FileWriter类20.8.5 CharArrayReader类20.8.6 CharArrayWriter类20.8.7 BufferedReader类20.8.8 BufferedWriter类20.8.9 PushbackReader类20.8.10 PrintWriter类20.9 Console类20.10 串行化20.10.1 Serializable接口20.10.2 Externalizable接口20.10.3 ObjectOutput接口20.10.4 ObjectOutputStream类20.10.5 ObjectInput接口20.10.6 ObjectInputStream类20.10.7 串行化示例20.11 流的优点第21章 探究21.1 NIO类21.2 NIO的基础知识21.2.1 缓冲区21.2.2 通道21.2.3 字符集和选择器21.3 JDK 7对NIO的增强21.3.1 Path接口21.3.2 Files类21.3.3 Path接口21.3.4 文件属性接口21.3.5 FileSystem、FileSystems和FileStore类21.4 使用NIO系统21.4.1 为基于通道的I/O使用21.4.2 为基于流的I/O使用21.4.3 为路径和文件系统操作使用21.5 JDK 7之前基于通道的例子21.5.1 读文件(JDK 7之前21.5.2 写文件(JDK 7之前第22章 联网22.1 联网的基础知识22.2 联网类和接口22.3 InetAddress类22.3.1 工厂方法22.3.2 实例方法22.4 Inet4Address类和Inet6Address类22.5 TCP/IP客户端套接字22.6 URL类22.7 URLConnection类22.8 HttpURLConnection类22.9 URI类22.10 c22.11 TCP/IP服务器套接字22.12 数据报22.12.1 DatagramSocket类22.12.2 DatagramPacket类22.12.3 数据报示例第23章 Applet类23.1 applet的两种类型23.2 applet的基础知识23.3 applet的架构23.4 applet的骨架23.4.1 applet的初始化和终止23.4.2 重写update()方法23.5 简单的applet显示方法23.6 请求重画23.7 使用状态栏窗口23.8 HTML APPLET标记23.9 向applet传递参数23.10 getDocumentBase()和getCodeB23.11 AppletContext接口和showDocument()方法23.12 AudioClip接口23.13 AppletStub接口23.14 向控制台输出第24章 事件处理24.1 两种事件处理机制24.2 委托事件模型24.2.1 事件24.2.2 事件源24.2.3 事件监听器24.3 事件类24.3.1 ActionEvent类24.3.2 AdjustmentEvent类24.3.3 ComponentEvent类24.3.4 ContainerEvent类24.3.5 FocusEvent类24.3.6 InputEvent类24.3.7 ItemEvent类24.3.8 KeyEvent类24.3.9 MouseEvent类24.3.10 MouseWheelEvent类24.3.11 TextEvent类24.3.12 WindowEvent类24.4 事件源24.5 事件监听器接口24.5.1 ActionListener接口24.5.2 AdjustmentListener接口24.5.3 ComponentListener接口24.5.4 ContainerListener接口24.5.5 FocusListener接口24.5.6 ItemListener接口24.5.7 KeyListener接口24.5.8 MouseListener接口24.5.9 MouseMotionListener接口24.5.10 MouseWheelListener接口24.5.11 TextListener接口24.5.12 WindowFocusListener接口24.5.13 WindowListener接口24.6 使用委托事件模型24.6.1 处理鼠标事件24.6.2 处理键盘事件24.7 适配器类24.8 内部类第25章 AWT介绍:使用窗口、图形和文本25.1 AWT类25.2 窗口基本元素25.2.1 Component类25.2.2 Container类25.2.3 Panel类25.2.4 Window类25.2.5 Frame类25.2.6 Canvas类25.3 使用框架窗口25.3.1 设置窗口的尺寸25.3.2 隐藏和显示窗口25.3.3 设置窗口的标题25.3.4 关闭框架窗口25.4 在基于AWT的applet中创建框架窗口25.5 创建基于窗口的程序25.6 在窗口中显示信息25.7 使用图形25.7.1 绘制直线25.7.2 绘制矩形25.7.3 绘制椭圆和圆25.7.4 绘制弧形25.7.5 绘制多边形25.7.6 演示绘制方法25.7.7 改变图形的大小25.8 使用颜色25.8.1 Color类的方法25.8.2 设置当前图形的颜色25.8.3 一个演示颜色的a25.9 设置绘图模式25.10 使用字体25.10.1 确定可用字体25.10.2 创建和选择字体25.10.3 获取字体信息25.11 使用FontMetrics管理文本输出25.11.1 显示多行文本25.11.2 居中显示文本25.11.3 对齐多行文本第26章 使用AWT控件、布局管理器和菜单26.1 AWT控件的基础知识26.1.1 添加和移除控件26.1.2 响应控件26.1.3 HeadlessException异常26.2 使用标签26.3 使用命令按钮26.4 使用复选框26.5 使用复选框组26.6 使用下拉列表26.7 使用列表框26.8 管理滚动条26.9 使用Text26.10 使用Tex26.11 理解布局管理器26.11.1 FlowLayout布局管理器26.11.2 BorderLayout布局管理器26.11.3 使用I26.11.4 GridLayout布局管理器26.11.5 CardLayout布局管理器26.11.6 GridBagLayout布局管理器26.12 菜单栏和菜单26.13 对话框26.14 FileDialog类26.15 关于重写paint()方法第27章 图像27.1 文件格式27.2 图像基础:创建、加载与显示27.2.1 创建Image对象27.2.2 加载图像27.2.3 显示图像27.3 ImageObserver接口27.4 双缓冲27.5 MediaTracker类27.6 ImageProducer接口27.7 ImageConsumer接口27.8 ImageFilter类27.8.1 CropImageFilter类27.8.2 RGBImageFilter类27.9 其他图像类第28章 并发实用工具28.1 并发API包28.1.1 java.util.concurrent包28.1.2 java.util.concurrent.atomic包28.1.3 java.util.concurrent.locks包28.2 使用同步对象28.2.1 Semaphore类28.2.2 CountDownLatch类28.2.3 CyclicBarrier类28.2.4 Exchanger类28.2.5 Phaser类28.3 使用执行器28.3.1 一个简单的执行器示例28.3.2 使用Callable和Future接口28.4 TimeUnit枚举28.5 并发集合28.6 锁28.7 原子操作28.8 通过Fork/Join框架进行并行编程28.8.1 主要的Fork/Join类28.8.2 分而治之的策略28.8.3 一个简单的Fork/Join示例28.8.4 理解并行级别带来的影响28.8.5 一个使用RecursiveTask[V]的例子28.8.6 异步执行任务28.8.7 取消任务28.8.8 确定任务的完成状态28.8.9 重新启动任务28.8.10 深入研究28.8.11 关于Fork/Join框架的一些提示28.9 并发实用工具与Java传统方式的比较第29章 流29.1 流的基础知识29.1.1 流接口29.1.2 如何获得流29.1.3 一个简单的流示例29.2 缩减操作29.3 使用并行流29.4 映射29.5 收集29.6 迭代器和流29.6.1 对流使用迭代器29.6.2 使用Splite29.7 流API中更多值得探究的地方第30章 正则表达式和其他包30.1 核心Java API包30.2 正则表达式处理30.2.1 Pattern类30.2.2 Matcher类30.2.3 正则表达式的语法30.2.4 演示模式匹配30.2.5 模式匹配的两个选项30.2.6 探究正则表达式30.3 反射30.4 远程方法调用30.5 使用java.text格式化日期和时间30.5.1 DateFormat类30.5.2 SimpleDateFormat类30.6 JDK 8新增的时间和日?30.6.1 时间和日期的基础知识30.6.2 格式化日期和时间30.6.3 解析日期和时间字符串30.7 探究java.time包的其他方面第Ⅲ部分 使用Swing进行 GUI编程第31章 Swing简介31.1 Swing的起源31.2 Swing以AWT为基础31.3 两个关键的Swing特性31.3.1 Swing组件是轻量级的31.3.2 Swing支持可插入外观31.4 MVC连接31.5 组件与容器31.5.1 组件31.5.2 容器31.5.3 顶级容器窗格31.6 Swing包31.7 一个简单的Swing应用程序31.8 事件处理31.9 创建Swing ap31.10 在Swing中绘图31.10.1 绘图的基础知识31.10.2 计算可绘制区域31.10.3 一个绘图示例第32章 探究S32.1 JLabel与Image32.2 JTextF32.3 Swing按钮32.3.1 JBu32.3.2 JToggleBu32.3.3 复选框32.3.4 单选按钮32.4 JTabbed32.5 JScroll32.6 J32.7 JComb32.8 树32.9 JT第33章 Swing菜单简介33.1 菜单的基础知识33.2 JMenuBar、JMenu和JMenuItem概述33.2.1 JMen33.2.2 J33.2.3 JMenu33.3 创建主菜单33.4 向菜单项添加助记符和加速键33.5 向菜单项添加图片和工具提示33.6 使用JRadioButtonMenuItem和JCheckBoxMenu33.7 创建弹出菜单33.8 创建工具栏33.9 使用动作33.10 完整演示MenuDemo程序33.11 继续探究S第Ⅳ部分 使用JavaFX进行GUI编程第34章 JavaFX GUI编程简介34.1 JavaFX的基础概念34.1.1 JavaFX包34.1.2 Stage和Scene类34.1.3 节点和场景图34.1.4 布局34.1.5 Application类和生命周期方法34.1.6 启动JavaFX应用程序34.2 JavaFX应用程序的骨架34.3 编译和运行JavaFX程序34.4 应用程序线程34.5 一个简单的JavaFX控件:L34.6 使用按钮和事件34.6.1 事件的基础知识34.6.2 按钮控件简介34.6.3 演示事件处理和按钮34.7 直接在画布上绘制第35章 探究JavaFX控件35.1 使用Image和Image35.1.1 向标签添加图片35.1.2 在按钮中使用图片35.2 ToggleBu35.3 RadioBu35.3.1 处理开关组中的变化事件35.3.2 处理单选按钮的另一种方式35.4 Chec35.5 List35.5.1 ListView的滚动条35.5.2 启用多项选择35.6 Comb35.7 TextF35.8 Scroll35.9 Tree35.10 效果和变换简介35.10.1 效果35.10.2 变换35.10.3 演示效果和变换35.11 添加工具提示35.12 禁用控件第36章 JavaFX菜单简介36.1 菜单的基础知识36.2 MenuBar、Menu和MenuItem概述36.2.1 Men36.2.236.2.3 Menu36.3 创建主菜单36.4 向菜单项添加助记符和加速键36.5 向菜单项添加图片36.6 使用RadioMenuItem和CheckMenu36.7 创建上下文菜单36.8 创建工具栏36.9 完整的MenuDemo程序36.10 继续探究Ja第Ⅴ部分 应用第37章 Java37.1 Java Bean是什么37.2 Java Bean的优势37.3 内省37.3.1 属性的设计模式37.3.2 事件的设计模式37.3.3 方法与设计模式37.3.4 使用BeanInfo接口37.4 绑定属性与约束属性37.5 持久性37.6 定制器37.7 Java Bean37.7.1 Introspector类37.7.2 PropertyDescriptor类37.7.3 EventSetDescriptor类37.7.4 MethodDescriptor类37.8 一个Bean示例第38章 ser38.1 背景38.2 servelet的生命周期38.3 servlet开发选项38.4 使用To38.5 一个简单的ser38.5.1 创建和编译servlet源代码38.5.2 启动To38.5.3 启动Web浏览器并请求ser38.6 Servlet38.7 javax.servlet包38.7.1 Servlet接口38.7.2 ServletConfig接口38.7.3 ServletContext接口38.7.4 ServletRequest接口38.7.5 ServletResponse接口38.7.6 GenericServlet类38.7.7 ServletInputStream类38.7.8 ServletOutputStream类38.7.9 servlet异常类38.8 读取servlet参数38.9 javax.servlet.http包38.9.1 HttpServletRequest接口38.9.2 HttpServletResponse接口38.9.3 HttpSession接口38.9.4 Cookie类38.9.5 HttpServlet类38.10 处理HTTP请求和响应38.10.1 处理HTTP GET请求38.10.2 处理HTTP POST请求38.11 使用co38.12 会话跟踪附录 使用Java的文档注释5.1.1 if语句5.1.2 switch语句5.2 迭代语句5.2.1 while语句5.2.2 do-while语句5.2.3 for语句5.2.4 for循环的for-each版本5.2.5 嵌套的循环5.3 跳转语句5.3.1 使用break语句5.3.2 使用continue语句5.3.3 return语句第6章 类6.1 类的基础知识6.1.1 类的一般形式6.1.2 一个简单的类6.2 声明对象6.3 为对象引用变量赋值6.4 方法6.4.1 为Box类添加方法6.4.2 返回值6.4.3 添加带参数的方法6.5 构造函数6.6 this关键字6.7 垃圾回收6.8 finalize()方法6.9 堆栈类第7章 方法和类的深入分析7.1 重载方法7.2 将对象用作参数7.3 参数传递的深入分析7.4 返回对象7.5 递归7.6 访问控制7.7 理解st7.8 final介绍7.9 重新审视数组7.10 嵌套类和内部类7.11 String类介绍7.12 使用命令行参数7.13 varargs:可变长度参数7.13.1 重载varargs方法7.13.2 varargs方法与模糊性第8章 继承8.1 继承的基础知识8.1.1 成员访问与继承8.1.2 一个更实际的例子8.1.3 超类变量可以引用子类对象8.2 使用super关键字8.2.1 使用super调用超类的构造函数8.2.2 super的另一种用法8.3 创建多级继承层次8.4 构造函数的调用时机8.5 方法重写8.6 动态方法调度8.6.1 重写方法的目的8.6.2 应用方法重写8.7 使用抽象类8.8 在继承中使用final关键字8.8.1 使用final关键字阻止重写8.8.2 使用final关键字阻止继承8.9 Object类第9章 包和接口9.1 包9.1.1 定义包9.1.2 包查找与CLAS9.1.3 一个简短的包示例9.2 访问保护9.3 导入包9.4 接口9.4.1 定义接口9.4.2 实现接口9.4.3 嵌套接口9.4.4 应用接口9.4.5 接口中的变量9.4.6 接口可以扩展9.5 默认接口方法9.5.1 默认方法的基础知识9.5.2 一个更加实用的例子9.5.3 多级继承的问题9.6 在接口中使用静态方法9.7 关于包和接口的最后说明第10章 异常处理10.1 异常处理的基础知识10.2 异常类型10.3 未捕获的异常10.4 使用try和10.5 多条catch子句10.6 嵌套的try语句10.710.8 t10.9 fi10.10 Java的内置异常10.11 创建自己的异常子类10.12 链式异常10.13 3个近期添加的异常特性10.14 使用异常第11章 多线程编程11.1 Java线程模型11.1.1 线程优先级11.1.2 同步11.1.3 消息传递11.1.4 Thread类和Runnable接口11.2 主线程11.3 创建线程11.3.1 实现Runnable接口11.3.2 扩展Thread类11.3.3 选择一种创建方式11.4 创建多个线程11.5 使用isAlive()和join()方法11.6 线程优先级11.7 同步11.7.1 使用同步方法11.7.2 synchronized语句11.8 线程间通信11.9 挂起、恢复与停止线程11.10 获取线程的状态11.11 使用多线程第12章 枚举、自动装箱与注解(元数据12.1 枚举12.1.1 枚举的基础知识12.1.2 values()和valueOf()方法12.1.3 Java枚举是类类型12.1.4 枚举继承自Enum类12.1.5 另一个枚举示例12.2 类型封装器12.2.1 Character封装器12.2.2 Boolean封装器12.2.3 数值类型封装器12.3 自动装箱12.3.1 自动装箱与方法12.3.2 表达式中发生的自动装箱/拆箱12.3.3 布尔型和字符型数值的自动装箱/拆箱12.3.4 自动装箱/拆箱有助于防止错误12.3.5 一些警告12.4 注解(元数据12.4.1 注解的基础知识12.4.2 指定保留策略12.4.3 在运行时使用反射获取注解12.4.4 AnnotatedElement接口12.4.5 使用默认值12.4.6 标记注解12.4.7 单成员注解12.4.8 内置注解12.5 类型注解12.6 重复注解第13章 I/O、applet以及其他主题13.1 I/O的基础知识13.1.1 流13.1.2 字节流和字符流13.1.3 预定义流13.2 读取控制台输入13.2.1 读取字符13.2.2 读取字符串13.3 向控制台写输出13.4 PrintWriter类13.5 读/写文件13.6 自动关闭文件13.7 applet的基础知识13.8 transient和volatile修饰符13.9 使用instanceof运算符13.10 str13.11 本地方法13.12 使用a13.13 静态导入13.14 通过this()调用重载的构造函数13.15 紧凑API配置文件第14章 泛型14.1 什么是泛型14.2 一个简单的泛型示例14.2.1 泛型只使用引用类型14.2.2 基于不同类型参数的泛型类型是不同的14.2.3 泛型提升类型安全性的原理14.3 带两个类型参数的泛型类14.4 泛型类的一般形式14.5 有界类型14.6 使用通配符参数14.7 创建泛型方法14.8 泛型接口14.9 原始类型与遗留代码14.10 泛型类层次14.10.1 使用泛型超类14.10.2 泛型子类14.10.3 泛型层次中的运行时类型比较14.10.4 强制转换14.10.5 重写泛型类的方法14.11 泛型的类型推断14.12 擦除14.13 模糊性错误14.14 使用泛型的一些限制14.14.1 不能实例化类型参数14.14.2 对静态成员的一些限制14.14.3 对泛型数组的一些限制14.14.4 对泛型异常的限制第15章 lambda表达式15.1 lambda表达式简介15.1.1 lambda表达式的基础知识15.1.2 函数式接口15.1.3 几个lambda表达式示例15.2 块lambda表达式15.3 泛型函数式接口15.4 作为参数传递lambda表达式15.5 lambda表达式与异常15.6 lambda表达式和变量捕获15.7 方法引用15.7.1 静态方法的方法引用15.7.2 实例方法的方法引用15.7.3 泛型中的方法引用15.8 构造函数引用15.9 预定义的函数式接口第Ⅱ部分 Java库第16章 字符串处理16.1 String类的构造函数16.2 字符串的长度16.3 特殊的字符串操作16.3.1 字符串字面值16.3.2 字符串连接16.3.3 字符串和其他数据类型的连接16.3.4 字符串转换和toString()方法16.4 提取字符16.4.1 cha16.4.2 getCh16.4.3 getBy16.4.4 toCharAr16.5 比较字符串16.5.1 equals()和equalsIgnoreC16.5.2 regionMatc16.5.3 startsWith()和endsW16.5.4 equals()与16.5.5 compar16.6 查找字符串16.7 修改字符串16.7.1 substr16.7.2 con16.7.3 repl16.7.4 t16.8 使用valueOf()转换数据16.9 改变字符串中字符的大小写16.10 连接字符串16.11 其他String方法16.12 StringBuffer类16.12.1 StringBuffer类的构造函数16.12.2 length()与capac16.12.3 ensureCapac16.12.4 setLen16.12.5 charAt()与setCha16.12.6 getCh16.12.7 app16.12.8 ins16.12.9 reve16.12.10 delete()与deleteCha16.12.11 repl16.12.12 substr16.12.13 其他StringBuffer方法16.13 StringBuilder类第17章 探究java17.1 基本类型封装器17.1.1 N17.1.2 Double与17.1.3 理解isInfinite()与is17.1.4 Byte、Short、Integer?17.1.5 Char17.1.6 对Unicode代码点的附加支持17.1.7 Bo17.2 Void类17.3 Process类17.4 Runtime类17.4.1 内存管理17.4.2 执行其他程序17.5 ProcessBuilder类17.6 System类17.6.1 使用currentTimeMillis()计时程序的执行17.6.2 使用arrayc17.6.3 环境属性17.7 Object类17.8 使用clone()方法和Cloneable接口17.9 Class类17.10 ClassLoader类17.11 Math类17.11.1 三角函数17.11.2 指数函数17.11.3 舍入函数17.11.4 其他数学方法17.12 StrictMath类17.13 Compiler类17.14 Thread类、ThreadGroup类和Runnable接口17.14.1 Runnable接口17.14.2 Thread类17.14.3 ThreadGroup类17.15 ThreadLocal和InheritableThreadLocal类17.16 Package类17.17 RuntimePermission类17.18 Throwable类17.19 SecurityManager类17.20 StackTraceElement类17.21 Enum类17.22 ClassValue类17.23 CharSequence接口17.24 Comparable接口17.25 Appendable接口17.26 Iterable接口17.27 Readable接口17.28 AutoCloseable接口17.29 Thread.UncaughtExceptionHandler接口17.30 java.lang子包17.30.1 java.lang.annot17.30.2 java.lang.instr17.30.3 java.lang.i17.30.4 java.lang.manag17.30.5 java.lan17.30.6 java.lang.re第18章 java.util第1部分:集合框架18.1 集合概述18.2 JDK 5对集合框架的修改18.2.1 泛型从根本上改变了集合框架18.2.2 自动装箱使得使用基本类型更加容易18.2.3 for-each风格的for循环18.3 集合接口18.3.1 Collection接口18.3.2 List接口18.3.3 Set接口18.3.4 SortedSet接口18.3.5 NavigableSet接口18.3.6 Queue接口18.3.7 Deque接口18.4 集合类18.4.1 ArrayList类18.4.2 LinkedList类18.4.3 HashSet类18.4.4 LinkedHashSet类18.4.5 TreeSet类18.4.6 PriorityQueue类18.4.7 ArrayDeque类18.4.8 EnumSet类18.5 通过迭代器访问集合18.5.1 使用迭代器18.5.2 使用for-each循环替代迭代器18.6 Splite18.7 在集合中存储用户定义的类18.8 RandomAccess接口18.9 使用映射18.9.1 映射接口18.9.2 映射类18.10 比较器18.11 集合算法18.12 Arrays类18.13 遗留的类和接口18.13.1 Enumeration接口18.13.2 Vector类18.13.3 Stack类18.13.4 Dictionary类18.13.5 Hashtable类18.13.6 Properties类18.13.7 使用store()和l18.14 集合小结第19章 java.util第2部分:更多实用工具类19.1 StringTokenizer类19.2 BitSet类19.3 Optional、OptionalDouble、OptionalInt和Optiona19.4 Date类19.5 Calendar类19.6 GregorianCalendar类19.7 TimeZone类19.8 SimpleTimeZone类19.9 Locale类19.10 Random类19.11 Observable类19.11.1 Observer接口19.11.2 Observer示例19.12 Timer和TimerTask类19.13 Currency类19.14 Formatter类19.14.1 Formatter类的构造函数19.14.2 Formatter类的方法19.14.3 格式化的基础知识19.14.4 格式化字符串和字符19.14.5 格式化数字19.14.6 格式化时间和日期19.14.7 %n和%%说明符19.14.8 指定最小字段宽度19.14.9 指定精度19.14.10 使用格式标志19.14.11 对齐输出19.14.12 空格、“+”、“0”以及“(”标志19.14.13 逗号标志19.14.14 “#”标志19.14.15 大写选项19.14.16 使用参数索引19.14.17 关闭Formatter对象19.14.18 printf()方法19.15 Scanner类19.15.1 Scanner类的构造函数19.15.2 扫描的基础知识19.15.3 一些Scanner示例19.15.4 设置定界符19.15.5 其他Scanner特性19.16 ResourceBundle、ListResourceBundle和19.17 其他实用工具类和接口19.18 java.util子包19.18.1 java.util.concurrent、java.util.concurrent.atomic和 java.util.concurrent.
精彩书摘
1.6.2面向对象 尽管受到前辈的影响,但是Java没有被设计成兼容其他语言的源代码,这使得.Java团队可以自由地从头开始设计。这样设计的结果是:对象采用清晰、可用、实用的方法。通过大量借鉴过去几十年中的诸多对象软件环境,Java设法在纯进化论者的“任何事物都是对象”模式和实用主义者的“够用就好”模式之间找到了平衡。Java中的对象模型既简单又易于扩展,而基本类型(例如整型)仍然是高性能的非对象类型。 1.6.3健壮性 Web的多平台环境对程序有特别的要求,因为程序必须在各种系统中可靠地执行。因此,在设计Java时,使其具备创建健壮程序的能力被提到了高优先级的地位。为了获得可靠性,Java在一些关键领域进行了限制,从而迫使程序员在程序开发中及早地发现错误。同时,使程序员不必再担心会引起编程错误的许多最常见的问题。因为Java是强类型化的语言,它在编译时检查代码。当然不管怎样,在运行时也检查代码。许多难以跟踪的bug,在运行时通常难以再现,这种情况在Java中几乎不可能产生。因为使编写好的程序在不同的运行条件下,以可预见的方式运行是Java的关键特性之一。 为了更好地理解Java是多么健壮,分析程序失败的两个主要原因:内存管理错误和未处理的异常(即运行时错误)。在传统的编程环境中,内存管理是一件困难、乏味的工作。例如,在C/C++中,程序员必须手动分配和释放所有动态内存。有时这会导致问题,因为程序员可能会忘记释放以前分配的内存,或者更糟糕的是,试图释放程序其他部分仍然在使用的内存。Java通过为您管理内存的分配和释放,可以从根本上消除这些问题(事实上,释放内存完全是自动的,因为Java为不再使用的对象提供了垃圾回收功能)。传统环境中的异常情况通常是由“除0”或“没有找到文件”这类错误引起的,并且必须使用既笨拙又难以理解的结构对它们进行管理。Java通过提供面向对象的异常处理功能在这个领域提供帮助。在编写良好的Java程序中,所有运行时错误都能够并且应当由程序进行管理。 1.6.4多线程 Java的设计目标之一是满足对创建交互式、网络化程序的现实需求。为了满足这一目标,Java支持多线程编程,允许编写同时执行许多工作的程序。Java运行时系统为多线程同步提供了优美且完善的解决方案,能够创造出运行平稳的交互式系统。Java提供了易用的多线程方法,使得只需要考虑程序的特定行为,而不需要考虑多任务子系统。 1.6.5体系结构中立 对于Java设计人员来说,核心问题是程序代码的持久性和可移植性。在创建Java时,程序员面临的一个主要问题是,即使是在同一台机器上也不能保证今天编写的程序到了明天仍然能够运行。操作系统升级、处理器升级以及核心系统资源的变化,都可能导致程序出现故障。 ……
前言/序言
前 言
Java是当今世界最重要、也是使用最广泛的计算机语言之一。而且,在多年之前它就已经拥有这一荣誉。与其他一些计算机语言随着时间的流逝、影响也逐渐减弱不同,Java随着时间的推移反而变得更加强大。从首次发布开始,Java就跃到了Internet编程的前沿。后续的每一个版本都进一步巩固了这一地位。如今,Java依然是开发基于Web的应用程序的最佳选择。在现实世界中,很多应用都是使用Java开发的,Java真的是非常重要!
J ava成功的一个关键原因是它的敏捷性。自从最初的1.0版发布以来,Java不断地进行完善以适应编程环境和开发人员编程方式的变化。最重要的是,Java不仅仅是在跟随潮流,更是在帮助创造潮流。Java能够适应计算机世界快速变化的能力,是它一直并且仍将如此成功的关键因素。
本书自从1996年首次出版以来,已经经历了数次改版,每次改版都反映了Java的不断演化进程。这是本书的第9版,已经针对Java SE 8 (JDK 8)进行了升级。因为Java SE 8向Java语言添加了几个新特性,所以本版包含了大量新的内容。最重要的一个新增特性是lambda表达式,它引入了一个全新的语法元素,并从根本上增强了Java语言的表达力。因为lambda表达式的影响如此之大,本书用了完整的一章来介绍它。另外,在本书其他章节也可看到它的用法示例。lambda表达式也催生了其他一些新功能。java.util.stream包中的流库就是其中之一,它支持对数据进行管道操作。本书也用了完整的一章来介绍流库。另外一个新特性就是默认方法,使用默认方法可为接口添加默认功能。重复注解和类型注解等功能进一步扩展了Java的能力。Java SE 8还对JavaAPI库做了显著增强,本书也做了这方面的介绍。
本书的最新版中,另外一项重要的新增内容是对Java的新GUI框架——JavaFX——的介绍。因为预计JavaFX将在Java应用程序的设计方式上扮演重要角色,所以本书用了三章来介绍JavaFX。简单地说,Java程序员需要具备JavaFX的使用经验。本书还新增了介绍Swing菜单的一章。虽然Swing可能最终会被JavaFX取代,但是在撰写本书时,它仍然是使用最广泛的Java GUI框架。因此,对Swing进行展开介绍完全是有必要的。最后,对许多小的更新方面的介绍被分散到了整本书中。
一本适合所有编程人员的书
本书面向所有开发人员,不管是初学者还是有经验的编程人员。初学者将从本书中发现每个主题的详细讨论,以及许多特别有帮助的例子。而对Java更高级特性和库的深入讨论,将会吸引有经验的编程人员。无论是对于初学者还是有经验的编程人员,本书都提供了持久的资源和方便实用的参考。
本书内容
本书是对Java语言的全面指导,描述了它的语法、关键字以及基本的编程原则,另外还介绍了Java API库的重要部分。本书分为5部分,每部分关注Java开发环境的不同方面。
第Ⅰ部分是对Java语言的深入辅导。该部分从基础知识开始讲解,包括数据类型、运算符、控制语句以及类等。然后本部分介绍继承、包、接口、异常处理以及多线程。之后介绍注解、枚举、自动装箱以及泛型等内容。本部分还介绍了I/O以及applet。本部分最后一章介绍了lambda表达式。刚才介绍过,lambda表达式是Java SE 8中最重要的新增特性。
第Ⅱ部分介绍Java标准API库的关键内容。本部分的主题包括字符串、I/O、网络、标准实用工具、集合框架、applet、AWT、事件处理、图像、并发编程(包括Fork/Join框架)、正则表达式和新增的流库。
第Ⅲ部分用三章内容介绍Swing。
第IV部分用三章内容介绍JavaFX。
第V部分包含两章,这两章展示了Java的实际应用。本部分的第37章介绍了Java Bean,第38章介绍了servlet。
在线资源
请记住,本书中全部示例程序的源代码都可以免费下载。
致 谢
在此我要特别感谢PatrickNaughton、Joe O’Neil和Danny Coward。
PatrickNaughton是Java语言的创立者之一,他还帮助我编写了本书的第1版。例如,本书第20、22和27章的大部分材料最初都是由Patrick提供的,他还为本书做出了其他许多贡献。他的洞察力、专业知识和活力都对本书的成功付梓贡献极大。
在准备本书的第2版和第3版的过程中,Joe O’Neil为目前本书第30、32、37和38章的内容提供了原始素材。Joe对我的好几本书都有帮助,并且他提供的帮助一 直都是最高质量的。
DannyCoward是本书第9版的技术编辑。Danny对我的好几本书都有贡献,他的忠告、洞察力和建议都有巨大的价值,对此表示非常感谢。
如何进一步学习
《Java 8编程参考官方教程(第9版)》为读者开启了Herb Schildt Java编程图书系列的大门。下面是其他一些您可能感兴趣的图书:
HerbSchildt’s Java Programming Cookbook
Java:A Beginner’s Guide
Swing:A Beginner’s Guide
The Artof Java