Java™ 教程-Java Tutorials 中文版Duke holding a sign

Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。

真正的大索引

The Java™ Tutorials 中所有内容页面的列表

Oracle 法律声明

路径:入门

Java 技术现象
关于 Java 技术
Java 技术可以做什么?
Java 技术将如何改变我的生活?
"Hello World!" 应用
"Hello World!" for the NetBeans IDE
"Hello World!" for Microsoft Windows
"Hello World!" for Solaris OS and Linux
仔细看看 "Hello World!" 应用
问题和练习:入门
常见问题(及其解决方案)

路径:学习 Java 语言

面向对象的编程概念
什么是对象?
什么是类?
什么是继承?
什么是接口?
什么是包?
问题和练习:面向对象的编程概念
语言基础
变量
    基本数据类型
    数组
    变量总结
    问题和练习:变量
运算符
    赋值,算术和一元运算符
    相等性,关系和条件运算符
    位运算和移位运算符
    运算符总结
    问题和练习:运算符
表达式,语句和块
问题和练习:表达式,语句和块
控制流语句
    if-then 和 if-then-else 语句
    switch 语句
    while 和 do-while 语句
    for 语句
    分支语句
    控制流语句总结
    问题和练习:控制流语句
类和对象
    声明类
    声明成员变量
    定义方法
    为你的类提供构造函数
    将信息传递给方法或构造函数
对象
    创建对象
    使用对象
更多关于类
    从方法中返回一个值
    使用 this 关键字
    控制对类成员的访问
    理解类成员
    初始化字段
    创建及使用类和对象的总结
    问题和练习:类
    问题和练习:对象
嵌套类
    内部类示例
    局部类
    匿名类
    Lambda 表达式
        方法引用
    何时使用嵌套类,本地类,匿名类和 Lambda 表达式
    问题和练习:嵌套类
枚举类型
问题和练习:枚举类型
注解
注解基础
声明一个注解类型
预定义的注解类型
类型注解和可插入类系统
重复注解
问题和练习:注解
接口和继承
接口
    定义一个接口
    实现一个接口
    使用接口作为类型
    不断发展的接口
    默认方法
    接口总结
    问题和练习:接口
继承
    状态,实现和类型的多重继承
    覆盖和隐藏方法
    多态
    隐藏字段
    使用 super 关键字
    Object 作为超类
    编写 final 类和方法
    抽象方法和类
    继承总结
    问题和练习:继承
数字和字符串
数字
    数字类
    格式化数字打印输出
    基础算术之外的补充
    数字总结
    问题和练习:数字
字符
字符串
    在数字和字符串之间转换
    操作字符串中的字符
    比较字符串和字符串的部分
    StringBuilder 类
    字符和字符串总结
自动装箱和拆箱
问题和练习:字符和字符串
泛型(更新)
为什么要使用泛型?
泛型类型
    原始类型
泛型方法
有界类型形参
    泛型方法和有界类型形参
泛型,继承和子类型
类型推断
通配符
    上界通配符
    无界通配符
    下界通配符
    通配符和子类型
    通配符捕获和辅助方法
    通配符使用指南
类型擦除
    删除泛型类型
    泛型方法的擦除
    类型擦除和桥接方法的影响
    不可具体化的类型
对泛型的限制
问题和练习:泛型
创建和使用包
    创建一个包
    命名一个包
    使用包成员
    管理源文件和类文件
    创建和使用包总结
    问题和练习:创建和使用包

路径:必要类

异常
异常是什么?
The Catch or Specify Requirement
捕获和处理异常
    try 块
    catch 块
    finally 块
    try-with-resources 语句
    把它们放在一起
指定方法抛出的异常
如何抛出异常
    链式异常
    创建异常类
非检查型异常 — 争议
异常的优点
总结
问题和练习
基本 I/O
I/O 流
    字节流
    字符流
    缓冲流
    扫描和格式化
        扫描
        格式化
    来自命令行的 I/O
    数据流
    对象流
文件 I/O(采用 NIO.2)
    什么是路径?(和其他文件系统事实)
    路径类
        路径操作
    文件操作
    检查文件或目录
    删除文件或目录
    复制文件或目录
    移动文件或目录
    管理元数据(文件和文件存储属性)
    读取、写入和创建文件
    随机访问文件
    创建和读取目录
    链接,符号或其他
    遍历文件树
    查找文件
    观察目录中的更改
    其他有用的方法
    旧版文件 I/O 代码
总结
问题和练习:基本 I/O
并发
进程和线程
线程对象
    定义和启动一个线程
    用 Sleep 来暂停执行
    Interrupts (中断)
    Joins
    SimpleThreads 示例
Synchronization (同步)
    线程干扰
    内存一致性错误
    同步方法
    内部锁和同步
    原子访问
Liveness (活跃度)
    Deadlock (死锁)
    Starvation and Livelock (饥饿和活锁)
Guarded Blocks (保护块)
Immutable Objects (不可变对象)
    一个同步类的例子
    定义不可变对象的策略
高级并发对象
    锁对象
    Executors (执行器)
        执行器接口
        线程池
        Fork/Join
    并发集合
    原子变量
    并发随机数
扩展阅读
问题和练习:并发
平台环境
配置实用程序
    属性
    命令行参数
    环境变量
    其他配置实用程序
系统实用程序
    命令行 I/O 对象
    系统属性
    安全管理
    System 中的其他方法
PATH 和 CLASSPATH
问题和练习:平台环境
正则表达式
介绍
测试工具
字符串字面量
字符类
预定义的字符类
量词
捕获组
边界匹配
Pattern 类的方法
Matcher 类的方法
PatternSyntaxException 类的方法
Unicode 支持
其他资源
问题和练习:正则表达式

路径:部署

Java Applets
Applet 入门
    定义 Applet 子类
    里程碑方法
    Applet 的生命周期
    Applet 的执行环境
    开发 Applet
    部署 Applet
        使用 Applet 标记进行部署
使用 Applet 做更多事情
    查找和加载数据文件
    定义和使用 Applet 参数
    显示短状态字符串
    在浏览器中显示文档
    从 Applet 调用 JavaScript 代码
    从 JavaScript 代码调用 Applet 方法
    使用事件处理程序处理初始化状态
    操纵 Applet 网页的 DOM
    显示自定义加载进度指示器
    将诊断写入标准输出和错误流
    开发可拖动的 Applet
    与其他 Applet 通信
    使用服务器端应用程序
        网络客户端 Applet 示例
    Applet 可以做什么和不能做什么
解决常见的 Applet 问题
问题和练习:Applets
Java Web Start
开发 Java Web Start 应用程序
    获取资源
部署 Java Web Start 应用程序
    设置 Web 服务器
显示自定义加载进度指示器
运行 Java Web Start 应用程序
Java Web Start 和 Security
常见的 Java Web Start 问题
问题和练习:Java Web Start
使用 Java Rich Internet Applications 做更多事情
设置受信任的参数和安全属性
    系统属性
JNLP API
    使用 JNLP API 访问客户端
Cookies
    访问 Cookie
自定义加载体验
富 Internet 应用程序中的安全性
保护富 Internet 应用程序的准则
问题和练习:利用富 Internet 应用程序做更多事
深入部署
用户接受 RIA
部署工具包
    部署 Applet
        自定义加载屏幕
        在 Applet 标记中嵌入 JNLP 文件
    部署 Java Web Start 应用程序
        更改启动按钮
        部署无代码库
    检查客户端 JRE 软件版本
Java 网络启动协议
    JNLP 文件的结构
部署最佳实践
    减少下载时间
    避免不必要的更新检查
    确保 JRE 软件的存在
    问题和练习:深入部署
部署自包含的应用程序
打包自包含应用程序的先决条件
转换现有应用程序
使用文件关联
    添加外部库
    提供默认参数
    为所有平台使用通用构建文件
使用多个入口点
问题和练习:自包含的应用程序
JAR 文件中的打包程序
使用 JAR 文件:基础知识
    创建 JAR 文件
    查看 JAR 文件的内容
    提取 JAR 文件的内容
    更新 JAR 文件
    运行 JAR 打包的软件
使用清单文件:基础知识
    理解默认清单
    修改清单文件
    设置应用程序的入口点
    将类添加到 JAR 文件的类路径中
    设置包版本信息
    在 JAR 文件中密封包
    使用清单属性增强安全性
签名和验证 JAR 文件
    理解签名和验证
    签名 JAR 文件
    验证签名的 JAR 文件
使用与 JAR 相关的 API
    JarClassLoader 类
    JarRunner 类
    问题和练习:JAR

路径:使用 JFC/Swing 创建 GUI

Swing 入门
关于 JFC 和 Swing
编译和运行 Swing 程序
使用 NetBeans IDE 学习 Swing
设置 CelsiusConverter 项目
NetBeans IDE 基础知识
创建 CelsiusConverter GUI
调整 CelsiusConverter GUI
添加应用程序逻辑
问题和练习:使用 NetBeans IDE 学习 Swing
使用 Swing 组件
使用顶级容器
JComponent 类
使用文本组件
    文本组件功能
    文本组件 API
如何使用各种组件
    如何制作 applet
    如何使用按钮,复选框和单选按钮
    如何使用 ButtonGroup 组件
    如何使用颜色选择器
    如何使用组合框
    如何制作对话框
    如何使用编辑器窗格和文本窗格
    如何使用文件选择器
    如何使用格式化文本框
    如何制作框架(主窗口)
    如何使用内部框架
    如何使用标签
    如何使用分层窗格
    如何使用列表
    如何使用菜单
    如何使用面板
    如何使用密码框
    如何使用进度条
    如何使用根窗格
    如何使用滚动窗格
    如何使用分隔符
    如何使用滑块
    如何使用微调器
    如何使用拆分窗格
    如何使用选项卡式窗格
    如何使用表格
    如何使用文本区域
    如何使用文本框
    如何使用工具栏
    如何使用工具提示
    如何使用树
如何在 Swing 组件中使用 HTML
如何使用模型
如何使用图标
如何使用边框
解决常见的组件问题
问题和练习:使用 Swing 组件
Swing 中的并发性
初始线程
事件调度线程
工作者线程和 SwingWorker
    简单的后台任务
    具有临时结果的任务
    取消后台任务
    绑定属性和状态方法
    问题和练习:Swing 中的并发性
使用其他 Swing 功能
如何与桌面类集成
如何创建半透明和形状的 Windows
如何使用 JLayer 类装饰组件
如何使用动作
如何使用 Swing 计时器
如何支持辅助技术
如何使用焦点子系统
如何使用键绑定
如何在对话框中使用模态
如何打印表格
如何打印文本
如何创建启动画面
如何使用系统托盘
使用其他 Swing 特性解决常见问题
在容器中布置组件
布局管理器的可视指南
使用布局管理器
布局管理的工作原理
如何使用各种布局管理器
如何使用 BorderLayout
如何使用 BoxLayout
如何使用 CardLayout
如何使用 FlowLayout
如何使用 GridBagLayout
如何使用 GridLayout
如何使用 GroupLayout
    GroupLayout 示例
如何使用 SpringLayout
创建自定义布局管理器
没有布局管理器(绝对定位)
解决常见布局问题
问题和练习:在容器中布置组件
修改外观和感觉
如何设置外观和感觉
合成的外观和感觉
    合成例
Nimbus 外观和感觉
    更改 Nimbus 的外观
    调整组件大小
    更改颜色主题
拖放和数据传输
DnD 简介
默认 DnD 支持
    演示 - BasicDnD
TransferHandler 类
    导出方法
    导入方法
TransferSupport 类
设置丢弃模式
    演示 - DropDemo
选择放置操作
    演示 - ChooseDropAction
显示放置位置
位置敏感放置
    演示 - LocationSensitiveDemo
空表放置
放置位置渲染
顶级放置
添加剪切,复制和粘贴(CCP)
文本组件中的 CCP
非文本组件中的 CCP
使用和创建 DataFlavor
把它们放在一起--DnD 和 CCP
解决常见的数据传输问题
编写事件监听器
事件监听器简介
关于编写事件监听器的一般信息
Swing 组件支持的监听器
为常见事件实现监听器
    如何编写动作监听器
    如何编写插入符号监听器
    如何编写变更监听器
    如何编写组件监听器
    如何编写容器监听器
    如何编写文档监听器
    如何编写焦点监听器
    如何编写内部框架监听器
    如何编写项目监听器
    如何编写按键监听器
    如何编写列表数据监听器
    如何编写列表选择监听器
    如何编写鼠标监听器
    如何编写鼠标运动监听器
    如何编写鼠标滚轮监听器
    如何编写属性更改监听器
    如何编写表模型监听器
    如何编写树展开监听器
    如何编写树模型监听器
    如何编写树选择监听器
    如何编写树将展开监听器
    如何编写可撤销的编辑监听器
    如何编写窗口监听器
监听器 API 表
解决常见的事件处理问题
问题和练习:编写事件监听器
执行自定义绘画
创建演示应用程序(步骤 1)
创建演示应用程序(步骤 2)
创建演示应用程序(步骤 3)
改进设计
仔细研究 Patin 机制
总结
解决常见的绘画问题
问题和练习:执行自定义绘画

路径:集合

集合简介
接口
Collection 接口
Set 接口
List 接口
Queue 接口
Deque 接口
Map 接口
对象排序
SortedSet 接口
SortedMap 接口
接口总结
问题和练习:接口
聚合操作
缩减
并行
问题和练习:聚合操作
实现
Set 实现
List 实现
Map 实现
Queue 实现
Deque 实现
包装器实现
便利实现
实现摘要
问题和练习:实现
算法
自定义集合实现
互操作性
兼容性
API 设计

路径:日期时间

日期时间概述
日期时间设计原则
日期时间包
方法命名规范
标准日历
概述
DayOfWeek 和 Month 枚举
日期类
日期和时间类
时区和偏移类
Instant 类
解析和格式化
Temporal 包
    Temporal Adjuster
    Temporal Query
Period 和 Duration
Clock
非 ISO 日期转换
旧版日期时间代码
总结
问题和练习:日期时间 API

路径:国际化

介绍
一个简单的例子
    国际化前
    国际化后
    运行示例程序
    国际化示例程序
清单
设置语言环境
创建语言环境
BCP 47 扩展
识别可用的语言环境
语言标签过滤和查找
语言环境的范围
区域敏感服务 SPI
隔离特定于语言环境的数据
关于 ResourceBundle 类
准备使用 ResourceBundle
使用属性文件支持 ResourceBundle
使用 ListResourceBundle
自定义资源包加载
格式化
数字和货币
    使用预定义格式
    自定义格式
日期和时间
    使用预定义格式
    自定义格式
    更改日期格式符号
消息
    处理复合消息
    处理复数
使用文本
检查字符属性
比较字符串
    执行与语言环境无关的比较
    自定义排序规则
    提高排序性能
Unicode
    术语
    称为代理的补充字符
    字符和字符串 API
    示例使用
    设计注意事项
    更多信息
检测文本边界
    关于 BreakIterator 类
    字符边界
    单词边界
    句子边界
    行边界
将拉丁数字转换为其他 Unicode 数字
转换非 Unicode 文本
    字节编码和字符串
    字符和字节流
规范化文本
使用 JTextComponent 类处理双向文本
网络资源国际化
国际化域名
国际化服务提供者
将自定义资源包安装为扩展

路径:2D 图形

Java 2D API 概念概述
坐标
Java 2D 渲染
几何图元
Text
图片
打印
图形入门
使用几何
绘制几何图元
绘制任意形状
描边和填充图元
使用文本 API
字体概念
文本布局概念
物理和逻辑字体
测量文本
高级文本显示
    使用渲染提示显示抗锯齿文本
    使用文本属性来设置文本样式
    绘制多行文本
    使用双向文本
使用图像
读/加载图像
绘制图像
创建和绘制图像
写/保存图像
打印
基本打印程序
使用“打印设置”对话框
打印多页文档
使用打印服务和属性
打印用户接口的内容
Swing 组件中的打印支持
Java2D 中的高级主题
转换形状,文本和图像
剪切绘图区域
合成图形
控制渲染质量
从几何图元构造复杂形状
支持用户交互

路径:声音

采样包概述
访问音频系统资源
播放音频
捕获音频
使用控件处理音频
使用文件和格式转换器
MIDI 包概述
访问 MIDI 系统资源
发送和接收 MIDI 信息
序列器简介
使用序列器方法
使用高级序列器功能
合成声音
服务提供者接口简介
提供采样音频服务
提供 MIDI 服务

路径:JavaBeans(TM)

快速开始
创建项目
按钮是一个 Bean
连接应用程序
使用第三方 Bean
编写 JavaBeans 组件
属性
方法
事件
使用 BeanInfo
高级 JavaBeans 主题
Bean 持久性
长期持久性
Bean 自定义

路径:JDBC(TM) 数据库访问

JDBC 简介
JDBC 架构
关系数据库概述
JDBC 基础知识
入门
使用 JDBC 处理 SQL 语句
建立连接
连接 DataSource 对象
处理 SQLExceptions
设置表
从结果集中获取和修改值
使用准备好的语句
使用事务
使用 RowSet 对象
使用 JdbcRowSet 对象
使用 CachedRowSet 对象
使用 JoinRowSet 对象
使用 FilteredRowSet 对象
使用 WebRowSet 对象
使用高级数据类型
使用大对象
使用 SQLXML 对象
使用数组对象
使用 DISTINCT 数据类型
使用结构化对象
使用自定义类型映射
使用数据链接对象
使用 RowId 对象
使用存储过程
将 JDBC 与 GUI API 结合使用

路径:Java 管理扩展(JMX)

JMX 技术概述
为什么使用 JMX 技术?
JMX 技术的架构
监视和管理 Java 虚拟机
介绍 MBean
标准 MBean
MXBeans
通知
远程管理
通过 JConsole 公开资源以进行远程管理
创建自定义 JMX 客户端

路径:用于 XML 处理的 Java API(JAXP)

JAXP 简介
包概述
XML API 的简单 API
文档对象模型 API
可扩展样式表语言转换 API
用于 XML API 的流式 API
查找 JAXP 示例程序
你从这里去哪里?
简单的 XML API
何时使用 SAX
使用 SAX 解析 XML 文件
实现 SAX 验证
处理词汇事件
使用 DTDHandlerEntityResolver
更多的信息
文档对象模型
何时使用 DOM
将 XML 数据读入 DOM
使用 XML Schema 进行验证
更多的信息
可扩展样式表语言转换
介绍 XSL,XSLT 和 XPath
XPath 如何工作
将 DOM 写为 XML 文件
从任意数据结构生成 XML
使用 XSLT 转换 XML 数据
用于 XML 的流式 API
为何选择 StAX?
StAX API
使用 StAX
Oracle 的流式 XML 分析器实现
示例代码
更多的信息
JAXP 1.5 和新属性
背景
外部资源
新属性
范围和顺序
与 SecurityManager 的关系
JDK 中的属性设置
使用属性
错误处理
StAX
结论
参考
处理限制
处理限制定义
范围和顺序
使用限制
错误处理
StAX
示例

路径:RMI

RMI 应用程序概述
编写 RMI 服务器
    设计远程接口
    实现远程接口
创建客户端程序
编译并运行示例
    编译示例程序
    运行示例程序

路径:Java SE 中的安全功能

安全功能概述
创建策略文件
设置策略文件以授予所需的权限
    启动政策工具
    授予所需的权限
    保存策略文件
快速浏览控制应用程序
观察应用程序自由
了解如何限制应用程序
设置策略文件以授予所需权限
    打开策略文件
    授予所需权限
    保存策略文件
查看策略文件效果
API 和工具用于安全代码和文件交换
签名代码并授予权限
代码签名者的步骤
    下载并试用示例应用程序
    创建包含类文件的 JAR 文件
    生成密钥
    签名 JAR 文件
    导出公钥证书
代码接收器的步骤
    观察受限制的应用程序
    将证书导入为可信证书
    设置策略文件以授予所需的权限
        启动政策工具
        指定密钥库
        添加带有 SignedBy 别名的策略条目
        保存策略文件
    查看策略文件效果
交换文件
合同发件人的步骤
    创建包含合同的 JAR 文件
    生成密钥
    签名 JAR 文件
    导出公钥证书
合同接收人的步骤
    将证书导入为可信证书
    验证 JAR 文件签名
生成和验证签名
生成数字签名
    准备初始程序结构
    生成公钥和私钥
    签名数据
    将签名和公钥保存在文件中
    编译并运行程序
验证数字签名
    准备初始程序结构
    输入和转换编码的公钥字节
    输入签名字节
    验证签名
    编译并运行程序
弱点和替代品
实现自己的权限
ExampleGame
HighScore 类
HighScorePermission 类
示例策略文件
把它们放在一起
    HighScore Developer(Chris)的步骤
    ExampleGame 开发人员(Terry)的步骤
    用户运行 ExampleGame(Kim)的步骤

路径:扩展机制

创建和使用扩展
安装型扩展
下载型扩展
理解扩展类加载
创建可扩展的应用程序
使扩展安全
设置扩展的权限
在扩展中密封包

路径:反射 API

获取 Class 对象
检查类修饰符和类型
发现类成员
故障排除
成员
字段
    获取字段类型
    获取和解析字段修饰符
    获取和设置字段值
    故障排除
方法
    获取方法类型信息
    获取方法参数的名称
    获取和解析方法修饰符
    调用方法
    故障排除
构造函数
    查找构造函数
    获取和解析构造函数修饰符
    创建新的类实例
    故障排除
数组和枚举类型
数组
    识别数组类型
    创建新数组
    获取和设置数组及其组件
    故障排除
枚举类型
    检查枚举
    使用枚举类型获取和设置字段
    故障排除

路径:自定义网络

网络概述
你可能已经知道的 Java 中的网络
网络基础知识
使用 URL
什么是 URL?
创建 URL
解析 URL
直接从 URL 读取
连接到 URL
读取和写入 URLConnection
关于套接字
什么是套接字?
读取和写入套接字
编写套接字的服务器端
关于数据报
什么是数据报?
编写数据报客户端和服务器
广播给多个收件人
编程访问网络参数
什么是网络接口?
获取网络接口
列出网络接口地址
网络接口参数
使用 Cookie
使用 Cookie 进行 HTTP 状态管理
CookieHandler 回调机制
默认 CookieManager
自定义 CookieManager

路径:Bonus

泛型
介绍
定义简单泛型
泛型与子类型
通配符
泛型方法
与旧代码互操作
附属细则
类字面量作为运行时类型标记
使用通配符更多的乐趣
将旧版代码转换为使用泛型
致谢
全屏独占模式 API
全屏独占模式
显示模式
被动与主动渲染
双缓冲和页面翻转
BufferStrategy 和 BufferCapabilities
例子
准备 Java 程序员语言认证
Java SE 8 程序员 I 考试
Java SE 8 程序员 II 考试
Java SE 8 升级考试

路径:Java 命名和目录接口

命名和目录概念
目录概念
JNDI 概述
命名包
目录和 LDAP 包
事件和服务提供者包
软件设置
LDAP 设置
Java 应用程序设置
命名和目录操作
命名异常
查找对象
列出上下文
添加,替换或移除绑定
重命名
创建和销毁子上下文
属性名称
读取属性
修改属性
添加,用属性替换绑定
搜索
    基本搜索
    过滤器
    范围
    结果计数
    时限
故障排除提示
LDAP 用户的高级主题
LDAP v3
JNDI 作为 LDAP API
    LDAP 操作如何映射到 JNDI API
    LDAP 错误代码如何映射到 JNDI 异常
安全
    对 LDAP 进行身份验证的模式
    认证机制
    匿名
    Simple(简单)
    SASL
    摘要-MD5
    SSL 和自定义套接字
更多 LDAP 操作
    LDAP 比较
    搜索结果
     LDAP 未经请求的通知
连接管理
    创建
     关闭
    
    配置
常见问题
目录中的 Java 对象
存储和读取对象
可序列化对象
JDK 5.0 和 JDK 6 中的新功能
获取专有名称
标准 LDAP 控件
分页结果控制
排序控制
管理推荐控制
操纵 LdapName(专有名称)
操纵相对专有名称(RDN)
设置 Ldap 操作的超时

路径:套接字直接协议

了解套接字直接协议
概述
创建 SDP 配置文件
启用 S​​DP 协议
调试 SDP
SDP 的技术问题
Solaris 和 Linux 支持
支持的 Java API
欲获得更多信息

路径:用于 XML 绑定的 Java 体系结构

JAXB 简介
JAXB 架构
代表 XML 内容
绑定 XML 模式
自定义生成的类和 Java 程序元素
JAXB 示例
基本示例
自定义 JAXB 绑定
Java-to-Schema 示例
欲获得更多信息