新書推薦:
《
我的心理医生是只猫
》
售價:NT$
225.0
《
股权控制战略:如何实现公司控制和有效激励(第2版)
》
售價:NT$
449.0
《
成吉思汗传:看历代帝王将相谋略 修炼安身成事之根本
》
售價:NT$
280.0
《
爱丁堡古罗马史-罗马城的起源和共和国的崛起
》
售價:NT$
349.0
《
人生解忧:佛学入门四十讲
》
售價:NT$
490.0
《
浪潮将至
》
售價:NT$
395.0
《
在虚无时代:与马克斯·韦伯共同思考
》
售價:NT$
260.0
《
日内交易与波段交易的资金风险管理
》
售價:NT$
390.0
編輯推薦:
如果你刚接触Java或者刚开始学习编程,这本畅销书会带你学习Java 11及以上版本的语言特性和API。通过富有吸引力、趣味性和实用性的示例,并且始终着眼于构建实际的应用,这本书的作者Marc Loy、Patrick Niemeyer和Daniel Leuck全面介绍了Java的基础知识,包括其类库、编程技术和惯用方法。
除了学习Java版本中的核心语言特性,你还会学习一些功能强大的新方法来管理应用中的资源和异常。
內容簡介:
使用编译器、解释器和其他工具完成Java开发。探索Java内置的线程功能和并发包。学习文本处理和强大的正则表达式API。编写高级网络应用或基于Web的应用和服务。
關於作者:
Marc Loy是一位专注用户体验设计和移动应用的软件开发人员和培训师。
Patrick Niemeyer是网络和分布式应用领域的一位独立顾问和作者。
Daniel Leuckis是Ikayzo公司的CEO,这是以东京和檀香山为基地的一个交互式设计和软件开发公司,其客户包括Sony、Oracle和PIMCO。
目錄 :
目录
前言 .1
第1 章 一种现代语言 9
1.1 进入Java 世界 .10
1.1.1 Java 起源 10
1.1.2 成长 .12
1.2 虚拟机 13
1.3 Java 与其他语言的比较 15
1.4 设计安全 .19
1.4.1 简化、简化、再简化19
1.4.2 类型安全和方法绑定20
1.4.3 增量式开发 .21
1.4.4 动态内存管理 .22
1.4.5 错误处理 23
1.4.6 线程 .23
1.4.7 可伸缩性 24
1.5 实现安全 .24
1.5.1 校验器 26
1.5.2 类加载器 27
1.5.3 安全管理器 .28
1.6 应用和用户级安全 .28
1.7 Java 路线图 29
1.7.1 过去:Java 1.0—Java 11 29
1.7.2 现在:Java 14 32
1.7.3 将来 .33
1.7.4 可用性 34
第2 章 个应用 .35
2.1 Java 工具和环境 35
2.1.1 安装JDK 36
2.1.2 在Linux 上安装OpenJDK 37
2.1.3 在macOS 上安装OpenJDK 38
2.1.4 在Windows 上安装OpenJDK 39
2.1.5 配置IntelliJ IDEA 并创建一个项目 43
2.1.6 运行项目 46
2.1.7 获得本书示例 .47
2.2 HelloJava .48
2.2.1 类 .51
2.2.2 main() 方法 .52
2.2.3 类和对象 54
2.2.4 变量和类类型 .54
2.2.5 HelloComponent 55
2.2.6 继承 .56
2.2.7 JComponent 类 57
2.2.8 关系和指向 .58
2.2.9 包和导入 59
2.2.10 paintComponent() 方法 61
2.3 HelloJava2: 续集 .62
2.3.1 实例变量 63
2.3.2 构造器 64
2.3.3 事件 .66
2.3.4 repaint() 方法 .69
2.3.5 接口 .69
2.4 既是结束,又是开始 71
第3 章 专业工具 72
3.1 JDK 环境 .72
3.2 JVM 73
3.3 运行Java 应用 .73
系统属性 75
3.4 类路径 76
3.4.1 javap 77
3.4.2 模块 .78
3.5 Java 编译器 78
3.6 尝试Java .80
3.7 JAR 文件 .86
3.7.1 文件压缩 86
3.7.2 jar 工具 87
3.7.3 pack200 工具 90
3.8 再接再厉 .91
第4 章 Java 语言 92
4.1 文本编码 .93
4.2 注释 95
Javadoc 注释 96
4.3 变量和常量 98
4.4 类型 99
4.4.1 基本类型 100
4.4.2 引用类型 105
4.4.3 推导类型 106
4.4.4 传递引用 107
4.4.5 谈谈字符串 108
4.5 语句和表达式 .109
4.5.1 语句 109
4.5.2 表达式 .118
4.6 数组 .124
4.6.1 数组类型 125
4.6.2 数组创建和初始化 126
4.6.3 使用数组 128
4.6.4 匿名数组 130
4.6.5 多维数组 130
4.7 类型、类和数组 132
第5 章 Java 中的对象. 134
5.1 类 .135
5.1.1 声明和实例化类 .136
5.1.2 访问字段和方法 .138
5.1.3 静态成员 143
5.2 方法 .146
5.2.1 局部变量 147
.2.2 遮蔽 147
5.2.3 静态方法 149
5.2.4 初始化局部变量 .151
5.2.5 参数传递和引用 .152
5.2.6 基本类型的包装器 154
5.2.7 方法重载 156
5.3 对象创建 157
5.3.1 构造器 .158
5.3.2 使用重载构造器 .159
5.4 对象析构 161
垃圾回收 161
5.5 包 .162
5.5.1 导入类 .163
5.5.2 自定义包 165
5.5.3 成员可见性和访问 166
5.5.4 用包编译 168
5.6 高级类设计 .169
5.6.1 派生子类和继承 .169
5.6.2 接口 174
5.6.3 内部类 .177
5.6.4 匿名内部类 179
5.7 组织内容和为失败做规划 180
第6 章 错误处理和日志 . 183
6.1 异常 .184
6.1.1 异常和错误类 184
6.1.2 异常处理 186
6.1.3 冒泡 190
6.1.4 栈轨迹 .191
6.1.5 受查和非受查异常 192
6.1.6 抛出异常 193
6.1.7 try 蔓延 196
6.1.8 finally 子句 197
6.1.9 带资源的try 语句 199
6.1.10 性能问题 .200
6.2 断言 .201
6.2.1 启用和禁用断言 .202
6.2.2 使用断言 202
6.3 日志API204
6.3.1 日志API 概述 .204
6.3.2 日志级别 206
6.3.3 一个简单的例子 .207
6.3.4 日志设置属性 208
6.3.5 日志记录器 210
6.3.6 性能 210
6.4 真实世界的异常 211
第7 章 集合和泛型 212
7.1 集合 .212
7.1.1 Collection 接口 213
7.1.2 集合类型 214
7.1.3 Map 接口 216
7.2 类型限制 218
7.2.1 容器 219
7.2.2 容器能固定吗? .220
7.3 引入泛型 221
谈谈类型 224
7.4 “没有勺子” .225
7.4.1 擦除 225
7.4.2 原始类型 227
7.5 参数化类型关系 228
为什么是List 而不是List
內容試閱 :
前言
这是一本关于Java 编程语言和开发环境的书。无论你是一个软件开发人员,还是仅在日常生活中使用互联网的普通人,毫无疑问,你肯定听说过Java。Java 的引入是Web 发展令人兴奋的事情之一,Java 的应用为互联网上业务的增长提供了极大的动力。可以说,Java 是世界上流行的编程语言之一,数以百万计的开发人员在可能想象到的几乎所有类型的计算机上使用Java。在开发人员需求方面,Java 已经超越C 和Visual Basic 等语言;对于某些类型的开发,Java 已经成为事实上的标准语言,尤其是基于Web 的服务。现在大多数大学都在计算机入门课程中使用了Java 语言及其他一些重要的现代语言,也许你正在你的某门课程中使用本书!
本书会为你提供Java 的基础知识和API 的全面介绍。作为一本名符其实的入门书,本书描述了Java 语言及其类库、编程技术和惯用方法。在本书中,我们将会深入探讨一些有趣的领域,还会触及其他流行主题的一点皮毛。O’Reilly 的其他书籍会扩展我们介绍的内容,提供有关Java 特定领域及应用的更全面的信息。
我们会尽可能提供富有吸引力、实用性和趣味性的例子,而不仅仅是罗列Java 的语言特性。虽然这些例子很简单,但也可以提示我们能够做什么。在本书中,我们并不会开发下一个杀手级应用,而是希望你能以此为起点,并能启发你经过数小时的试验和修改,开发出你自己的一流应用。
本书面向的读者
本书主要面向计算机专业人士、学生、技术人员及黑客。如果着眼于构建实际的应用,需要获取Java 语言的手经验,本书将能满足你的需求。本书还可以作为学习面向对象编程、网络编程和用户界面设计的一个绝佳教程。在学习Java 的同时,你还会学到一种强大而实用的软件开发方法。首先我们将深入了解Java 的基础知识和API。
从表面上看,Java 很像C 或C ,所以如果你有使用C 或C 语言的一些经验,那么学习本书时就会有一点小小的优势。如果没有,也不要担心。无须过分强调Java与C 或C 之间的语法相似性。在许多方面,Java 更类似于Smalltalk 和Lisp 等动态语言。如果你了解另外一种面向对象编程语言,这当然会有帮助,不过你可能需要改变一些想法,还要摒弃一些习惯。Java 语言比C 和Smalltalk 等语言要简单得多。如果你善于从简洁的例子和个人实践中学习,相信你肯定会喜欢本书。
本书的后一部分将会在Web 应用、Web 服务和请求处理等上下文中讨论Java 语言,所以你要熟悉Web 浏览器、服务器和文档的基本思想。
新发展
本书实际上是原来流行的《Exploring Java》系列的第7 版,不过本书已经更新并改名。对于每一版我们都会精心设计,不仅会增加涵盖额外特性的新内容,而且全面修订和更新已有内容,力求内容完整周密,还会补充多年来积累的实用想法和实践经验。在近的几个版本中,一个值得注意的变化是我们不再强调applet 的使用,这反映出近年来applet 在创建交互式Web 页面方面的作用已经减弱。相比之下,我们大大扩展了Java Web 应用和Web 服务方面的内容,这些是当前流行的成熟技术。
我们会介绍Java 的长期支持版本[OpenJDK 11,官方称其为Java 标准版(SE)11] 的所有重要特性,不过我们还加入了“特性”版本Java 12、Java 13 和Java 14的一些细节。这些年来,Sun Microsystems(被Oracle 收购之前Java 的所有者)多次改变Java 的命名机制。Sun Microsystems 创造了Java 2 一词来涵盖Java 1.2 引入的新特性,另外摒弃了术语JDK 而代之以SDK。到了第6 版,Sun Microsystems 从Java 1.4 版本跳到Java 5.0 版本,不过暂缓放弃术语JDK,并保留了它的编号约定。
自此之后,我们又有了Java 6、Java 7 等,直到现在的Java 14。
Java 的这一版本体现出了一个成熟语言的特质,只是偶尔会对API 和库做一些语法修改和更新。我们会努力展示这些新特性,并对本书中的每一个示例进行了更新,以反映当前的Java 实践和风格。
这一版新增内容(Java 11, 12, 13, 14)
本书会延续我们的传统,对内容进行全面改造,尽可能做到内容完整而且是的。
本书结合了Java 11(长期支持版本)和Java 12、Java 13 和Java 14 等特性版本的更新( 对于版本中包含和去除了哪些Java 特性,更多细节请参见第13 章)。这一版新增内容包括:
? 新的语言特性,包括泛型中的类型推导及改进的异常处理和自动化资源管理语法。
? 可用于试验代码段的新交互式环境jshell。
? 新提出的switch 表达式。
? 基本的lambda 表达式。
? 全面更新的示例和分析。
使用本书
本书的组织结构大致如下:
? 第1 章和第2 章介绍了Java 的基本概念,并提供了一个帮助你对Java 编程快速入门的教程。
? 第3 章讨论了用于Java 开发的一些基本工具,包括编译器、解释器、jshell 和JAR 文件包。
? 第4 章和第5 章介绍了编程的基础知识,然后描述了Java 语言本身,从基本语法开始,介绍了类和对象、异常、数组、枚举、注解及很多其他方面的内容。
? 第6 章介绍了异常、错误和Java 内置的日志功能。
? 第7 章介绍了集合及Java 中的泛型和参数化类型。
? 第8 章介绍了文本处理、格式化、扫描、字符串工具及很多核心API 工具。
? 第9 章介绍了Java 语言内置的线程功能。
? 第10 章介绍了使用Swing 进行图形用户界面(GUI)开发的基础知识。
? 第11 章介绍了Java I/O、流、文件、Socket、网络和NIO 包。
? 第12 章介绍了使用Servlet、Servlet 过滤器、WAR 文件的Web 应用和Web 服务。
? 第13 章介绍了Java Community Process(JCP),重点说明了如何跟踪Java 未来的变化,以及帮助你利用新特性改造已有的代码,如如何利用Java 8 中引入的lambda 表达式等。
如果你像我们一样,可能不会从头到尾地看书。另外如果你真的像我们一样,通常根本不会看前言。不过,如果你恰好看了这个前言,这里有几个建议:
? 如果你已经是一个程序员,只需要用很短的时间学习Java,或者可能想找一些例子,那么可以先看看第2 章的教程。如果这还不能让你满意,至少应该看看第3章的内容,其中阐述了如何使用编译器和解释器。这应该能让你入门。
? 如果你对编写网络程序或基于Web 的应用和服务感兴趣,那么第11 章和第12章应该可以满足你的需求。网络仍然是Java 应用中比较有趣和重要的一部分。
? 第10 章讨论了Java 的图形特性和组件架构。如果你对利用Java 编写GUI 感兴趣,那么应该看看这一章。
? 第13 章讨论了如何跟踪Java 语言本身的变化。不论你关注的是什么,都应该看看。
在线资源
Java 有很多在线资源。Oracle 的Java 官方网站是https://oreil.ly/Lo8QZ;你可以在这里查找、更新和下载各个Java 版本。在这里你还可以找到JDK 的参考实现,包括编译器、解释器及其他工具。
Oracle 还运营维护着OpenJDK 网站(https://oreil.ly/DrTm4)。这里有Java 及其相关工具的主要开源版本。我们将使用OpenJDK 完成这本书的所有示例。
你还应该访问O’Reilly 的网站(http://oreilly.com/)。你会在这里找到其他关于Java及大量其他主题的O’Reilly 书籍的信息。你还应该看看另外一些在线学习和会议网站——O’Reilly 真心拥护各种不同的教育形式。
当然,你还可以访问本书的主页(http://oreil.ly/Java_5E)!
本书使用约定
这本书中使用的字体约定很简单。
斜体用于(Italic):
? 路径名、文件名和程序名;
? 互联网地址,如域名和URL;
? 首次定义的术语;
? 程序名、编译器、解释器、工具和命令;
? 线程。
定宽字体用于(Constant width):
? Java 程序中的所有内容,包括方法名、变量名和类名;
? HTML 或XML 文档中出现的标记;
? 关键字、对象和环境变量。
定宽粗体用于(Constant width bold):
用户在命令行或对话框中键入的文本。
定宽斜体用于(Constant width italic):
代码中可替换的元素。
在正文中,我们总是在方法名后面使用一对空括号,使方法区别于变量和其他内容。在Java 的源代码清单中,我们会遵循Java 社区常用的编码约定。类名以大写字母开头;变量名和方法名用小写字母开头。常量名中的所有字母都采用大写。对于很长的名字,我们不用下划线来分隔单词;而是按照通常的做法,将( 个单词之后的) 各个单词的首字母大写,并把这些单词连在一起。例如,thisIsAVariable,thisIsAMethod(), ThisIsAClass 和THIS_IS_A_CONSTANT。另外要注意,谈到静态和非静态方法时,我们会加以区分。与其他书不同,我们不会写Foo.bar() 来表示Foo的bar() 方法,除非bar() 是一个静态方法( 在此情况下,这与Java 语法一致)。
使用代码示例
如果使用代码示例有任何技术问题,可以向bookquestions@oreilly.com 发送E-mail。本书的目的是帮助你完成工作。一般来讲,如果书中提供了示例代码,你可以在你的程序和文档中使用这些示例代码,不需要联系我们来得到许可,除非你直接复制了大部分的示例代码。例如,如果你在编写一个程序,使用了本书中的多段代码,这并不需要得到许可;但是出售或发行O’Reilly 书中示例代码的光盘则需要得到许可。
如果你回答问题时引用了本书的文字和示例代码,这不需要得到许可;但是如果你的产品的文档借用了本书中的大量示例代码,则需要得到许可。
我们希望但不严格要求标明引用出处。引用信息通常包括书名、作者名、出版商和ISBN。例如,“Learning Java, Fifth Edition, by Marc Loy, Patrick Niemeyer,and Daniel Leuck (O’Reilly). Copyright 2020 Marc Loy, Patrick Niemeyer, and Daniel Leuck, 978-1-492-05627-0”。
如果认为你在使用示例代码或其他内容时超出了合理使用的范围或者上述许可范围,可以随时联系我们:permissions@oreilly.com。
O’Reilly 在线学习平台(O’Reilly Online Learning)
近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly 的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly 和200 多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
如何联系我们
请把对本书的评价和问题发给出版社。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
针对本书,我们还创建了一个网页,列出了有关勘误信息和其他信息。你可以通过以下地址访问这个页面:https://oreil.ly/Java_5e。