微信扫一扫,移动浏览光盘
简介
Java具有面向对象、与平台无关、安全、稳定和多线程等特点,是目前
最流行的程序设计语言之一。全书共分9章,按Java知识的系统性,由浅入
深、循序渐进地介绍了Java语言实用知识与编程技术。内容包括Java语言概
述、流程控制与异常处理、Java面向对象程序设计、数组与集合、GUI程序
设计、Java数据库编程、流和文件、多线程与Applet以及Java网络编程。每
部分内容既有示例,又有案例。通过示例可以帮助学生理解知识,通过案例
可以将各知识点结合起来,指导学生应用知识,学以致用。教材中引进了一
些新知识和新方法,内容实用,重点突出,讲解精练,案例典型,既方便学
习,又便于应用。每章配备的课后习题参考了目前市场上常用的企业面试题
,针对性强,训练价值大。
本书内容丰富,实例典型,知识讲解系统,适合作为高等院校计算机及
相关专业的教材或参考书,也适合软件开发人员及其他有关人员作为自学参
考书或培训教程。
目录
第1章 Java语言概述 1
1.1 Java语言简介 1
1.1.1 Java语言的产生 1
1.1.2 Java应用体系 2
1.2 Java的工作原理及特点 2
1.2.1 Java的工作原理 2
1.2.2 Java语言的特点 3
1.3 Java编程环境 5
1.3.1 JSEDK及其安装 5
1.3.2 Java开发工具 6
1.4 Java程序结构 7
1.4.1 Java应用程序 8
1.4.2 案例1-1:包含两个类的程序 10
1.4.3 Applet程序 11
1.4.4 案例1-2:一个简单的绘图程序 12
1.4.5 Application与Applet程序的比较 12
1.5 Java语言基础 13
1.5.1 基本编码规则 13
1.5.2 案例1-3:代码注释 14
1.5.3 数据类型 16
1.5.4 常量和变量 18
1.5.5 运算符和表达式 19
1.5.6 Math类 23
1.5.7 数据类型转换 24
1.6 字符串和日期 25
1.6.1 字符串 25
1.6.2 案例1-4:对输入的字符串进行处理 29
1.6.3 日期和时间 31
1.6.4 案例1-5:日期工具类 33
1.7 本章小结 36
1.8 习题 36
第2章 流程控制与异常处理 38
2.1 分支结构 38
2.1.1 if语句 38
2.1.2 案例2-1:求一元二次方程的根 42
2.1.3 switch语句 43
2.1.4 案例2-2:求下一天日期 46
2.2 循环结构 48
2.2.1 for循环 48
2.2.2 案例2-3:求素数 49
2.2.3 while循环 50
2.2.4 循环嵌套 51
2.2.5 案例2-4:求sinx 51
2.2.6 do…while循环 53
2.2.7 案例2-5:进制转换 53
2.2.8 迭代循环 55
2.3 异常处理 56
2.3.1 异常及其体系结构 56
2.3.2 异常处理机制 57
2.3.3 抛出异常 60
2.3.4 案例2-6:整数的算术计算 61
2.3.5 自定义异常 62
2.3.6 案例2-7:求三角形面积 63
2.4 本章小结 64
2.5 习题 65
第3章 Java面向对象程序设计 66
3.1 面向对象编程 66
3.1.1 对象和类 66
3.1.2 面向对象程序设计 67
3.1.3 OOP的4个基本特征 68
3.2 类与对象 69
3.2.1 定义类 69
3.2.2 创建和使用对象 70
3.2.3 案例3-1:测试圆类 71
3.2.4 构造方法 72
3.2.5 析构方法 73
3.2.6 案例3-2:Person类 73
3.3 访问控制 75
3.3.1 包与类的访问控制 75
3.3.2 成员的访问控制与属性方法 76
3.3.3 案例3-3:使用权限修饰符的Person类 76
3.4 类变量、类常量和类方法 78
3.4.1 实例变量、类变量和类常量 78
3.4.2 变量的作用域与this关键字 79
3.4.3 实例方法和类方法 80
3.4.4 案例3-4:银行账户 81
3.5 类的方法重载 83
3.5.1 方法的参数类型 83
3.5.2 案例3-5:演示方法的参数类型 83
3.5.3 方法重载 85
3.6 类的继承 86
3.6.1 继承的基本概念 86
3.6.2 创建子类 86
3.6.3 方法覆盖 89
3.6.4 案例3-6:用继承的方式定义Student类和Teacher类 90
3.7 抽象类、接口及多态性 92
3.7.1 抽象类 92
3.7.2 案例3-7:一组图形类 93
3.7.3 接口 96
3.7.4 案例3-8:模拟学生管理系统的数据访问层和逻辑层 100
3.7.5 多态性 103
3.8 最终类和内部类 103
3.8.1 最终类 103
3.8.2 内部类 103
3.8.3 案例3-9:内部类使用演示 105
3.9 Java枚举类型 107
3.9.1 枚举类型概述 107
3.9.2 案例3-10:Week枚举类型 109
3.10 本章小结 110
3.11 习题 111
第4章 数组与集合 113
4.1 数组 113
4.1.1 数组的概念 113
4.1.2 数组的定义 113
4.1.3 案例4-1:成绩排序和统计 115
4.2 Collection 117
4.2.1 Java集合框架 117
4.2.2 Collection接口常用方法 117
4.2.3 遍历Collection 118
4.2.4 Collection的批量操作 119
4.3 集 120
4.3.1 HashSet类 120
4.3.2 案例4-2:用HashSet存储用户对象 121
4.3.3 TreeSet类 123
4.3.4 案例4-3:使用TreeSet存储学生对象 123
4.4 列表 126
4.4.1 List接口 126
4.4.2 ArrayList类 127
4.4.3 案例4-4:竞赛评分程序 128
4.4.4 Vector类 131
4.5 映射 131
4.5.1 Map接口 131
4.5.2 HashMap类 132
4.5.3 案例4-5:购物车 132
4.5.4 Hashtable类 135
4.6 Collections和Arrays 136
4.6.1 Collections类 136
4.6.2 Arrays类 137
4.7 本章小结 138
4.8 习题 139
第5章 GUI程序设计 141
5.1 Java图形API 141
5.1.1 AWT与Swing 141
5.1.2 图形API与Swing组件结构 142
5.1.3 怎样在容器中添加组件 143
5.2 图形界面基础 143
5.2.1 窗口 143
5.2.2 案例5-1:学生管理系统启动界面和主界面设计 145
5.2.3 对话框 147
5.2.4 常用组件 149
5.2.5 案例5-2:登录窗口 151
5.3 菜单和工具栏 153
5.3.1 菜单 153
5.3.2 案例5-3:为学生管理系统主界面设计菜单 155
5.3.3 工具栏 158
5.3.4 案例5-4:为学生管理系统主界面增加工具栏 159
5.4 界面布局和其他组件使用 160
5.4.1 界面布局 160
5.4.2 案例5-5:布局演示 162
5.5 其他组件的使用 166
5.5.1 其他组件介绍 166
5.5.2 案例5-6:添加学生界面设计 169
5.6 事件处理机制 170
5.6.1 事件处理模型 171
5.6.2 事件处理 172
5.6.3 常用事件 174
5.6.4 案例5-7:利用鼠标和键盘控制图片显示 175
5.7 图形图像基础 178
5.7.1 设置字体 178
5.7.2 设置颜色 179
5.7.3 Graphics类与绘图方法 180
5.7.4 案例5-8:绘制一个小车 181
5.7.5 2D绘图简介 183
5.7.6 显示图像 184
5.7.7 案例5-9:按不同方式显示图像 185
5.8 本章小结 186
5.9 习题 186
第6章 Java数据库编程 188
6.1 JDBC简介 188
6.1.1 什么是JDBC 188
6.1.2 JDBC的重要类和接口 189
6.2 基于JDBC编写数据库程序 189
6.2.1 设计准备 189
6.2.2 案例6-1:学生管理系统数据库设计 194
6.2.3 使用JDBC访问数据库的一般步骤 196
6.2.4 应用MVC设计模式 196
6.3 数据库的连接 197
6.3.1 DriverManager 197
6.3.2 Connection 197
6.3.3 使用JDBC-ODBC桥实现数据库的连接 198
6.3.4 使用纯Java JDBC驱动程序 198
6.3.5 案例6-2:连接学生管理数据库 200
6.4 数据的基本操作 201
6.4.1 数据操作的基本原理 201
6.4.2 常用的查询方法 203
6.4.3 案例6-3:显示学生数据 204
6.4.4 更新数据 208
6.4.5 案例6-4:修改学生数据 209
6.4.6 事务处理 214
6.5 数据查询界面设计 214
6.5.1 案例6-5:以表格形式显示学生数据查询结果 214
6.5.2 案例6-6:分页显示学生数据查询结果 217
6.6 使用存储过程 222
6.6.1 存储过程的定义 222
6.6.2 调用存储过程 223
6.6.3 案例6-7:使用存储过程查询学生成绩 224
6.7 大对象的存取 227
6.7.1 大对象存储的基本方法 227
6.7.2 案例6-8:设置学生照片 228
6.8 本章小结 232
6.9 习题 232
第7章 流和文件 234
7.1 文件管理基础 234
7.1.1 使用File类管理文件 234
7.1.2 案例7-1:递归显示或删除文件 237
7.1.3 过滤器与文件选择对话框 238
7.2 字符流与文本文件读写 242
7.2.1 字符流简介 242
7.2.2 文件字符流 243
7.2.3 案例7-2:用字符流复制文件 244
7.3 字节流与二进制文件读写 246
7.3.1 字节流简介 246
7.3.2 文件字节流简介 247
7.3.3 案例7-3:用字节流复制文件 248
7.4 数据流和对象流 250
7.4.1 数据流简介 250
7.4.2 案例7-4:使用数据流读写文件 251
7.4.3 对象流简介 252
7.4.4 案例7-5:以对象为单位读写数据 253
7.5 文件的随机读写 254
7.5.1 RandomAccessFile简介 254
7.5.2 案例7-6:随机读写文件 254
7.6 本章小结 256
7.7 习题 256
第8章 多线程与Applet 258
8.1 线程概述 258
8.1.1 线程与进程 258
8.1.2 线程的优点 259
8.1.3 线程体与线程载体 259
8.2 线程的创建 259
8.2.1 实现Runnable接口创建线程 259
8.2.2 案例8-1:为学生管理系统增加状态栏 260
8.2.3 扩展Thread类建立线程 261
8.2.4 案例8-2:利用线程设计启动界面 262
8.2.5 建立线程的两种方法的比较 263
8.2.6 Thread类 264
8.3 线程的状态与控制 264
8.3.1 线程的状态 264
8.3.2 线程的控制 266
8.3.3 案例8-3:图片切换 268
8.3.4 线程组 271
8.4 线程的优先级 272
8.4.1 Java线程优先级 272
8.4.2 案例8-4:数数程序 272
8.5 线程同步 274
8.5.1 Java线程同步机制 274
8.5.2 案例8-5:取款和存款 275
8.5.3 死锁 277
8.6 线程通信 278
8.6.1 Java线程通信机制 278
8.6.2 案例8-6:哲学家用餐问题 279
8.6.3 “生产者-消费者”问题 281
8.6.4 案例8-7:吃苹果 281
8.7 线程新特征 284
8.7.1 阻塞队列与障碍器 284
8.7.2 线程池、锁及条件变量 286
8.7.3 案例8-8:不能透支的取款和存款 288
8.8 Applet程序设计 291
8.8.1 Applet程序原理 291
8.8.2 案例8-9:在Applet中随机画圆 293
8.8.3 Applet中实现动画的基本原理 294
8.8.4 案例8-10:在Applet中实现动画 295
8.8.5 向Applet传递参数 297
8.8.6 案例8-11:绘制统计图 297
8.9 本章小结 298
8.10 习题 299
第9章 Java网络编程 300
9.1 网络编程基础 300
9.1.1 网络基本概念 300
9.1.2 网络协议 301
9.2 获取网络信息 302
9.2.1 获取网络地址信息 302
9.2.2 案例9-1:通过InetAddress获取主机名或IP 303
9.2.3 获取网络资源属性 304
9.2.4 案例9-2:通过URL获取络资源属性 305
9.3 访问网络资源 306
9.3.1 获取网络资源 306
9.3.2 案例9-3:读取网络文本文件 307
9.3.3 使用JEditorPane浏览HTML网页 309
9.3.4 案例9-4:简单的浏览器 310
9.4 基于TCP/IP协议的通信 312
9.4.1 客户机/服务器模式和套接字 312
9.4.2 客户端程序的原理 313
9.4.3 案例9-5:TCP的客户端程序 314
9.4.4 服务器程序的原理 318
9.4.5 案例9-6:TCP服务器端程序 319
9.5 基于UDP/IP协议的通信 324
9.5.1 数据报通信的原理 324
9.5.2 案例9-7:基于数据报的主机通信 325
9.6 本章小结 329
9.7 习题 329
参考文献 331
1.1 Java语言简介 1
1.1.1 Java语言的产生 1
1.1.2 Java应用体系 2
1.2 Java的工作原理及特点 2
1.2.1 Java的工作原理 2
1.2.2 Java语言的特点 3
1.3 Java编程环境 5
1.3.1 JSEDK及其安装 5
1.3.2 Java开发工具 6
1.4 Java程序结构 7
1.4.1 Java应用程序 8
1.4.2 案例1-1:包含两个类的程序 10
1.4.3 Applet程序 11
1.4.4 案例1-2:一个简单的绘图程序 12
1.4.5 Application与Applet程序的比较 12
1.5 Java语言基础 13
1.5.1 基本编码规则 13
1.5.2 案例1-3:代码注释 14
1.5.3 数据类型 16
1.5.4 常量和变量 18
1.5.5 运算符和表达式 19
1.5.6 Math类 23
1.5.7 数据类型转换 24
1.6 字符串和日期 25
1.6.1 字符串 25
1.6.2 案例1-4:对输入的字符串进行处理 29
1.6.3 日期和时间 31
1.6.4 案例1-5:日期工具类 33
1.7 本章小结 36
1.8 习题 36
第2章 流程控制与异常处理 38
2.1 分支结构 38
2.1.1 if语句 38
2.1.2 案例2-1:求一元二次方程的根 42
2.1.3 switch语句 43
2.1.4 案例2-2:求下一天日期 46
2.2 循环结构 48
2.2.1 for循环 48
2.2.2 案例2-3:求素数 49
2.2.3 while循环 50
2.2.4 循环嵌套 51
2.2.5 案例2-4:求sinx 51
2.2.6 do…while循环 53
2.2.7 案例2-5:进制转换 53
2.2.8 迭代循环 55
2.3 异常处理 56
2.3.1 异常及其体系结构 56
2.3.2 异常处理机制 57
2.3.3 抛出异常 60
2.3.4 案例2-6:整数的算术计算 61
2.3.5 自定义异常 62
2.3.6 案例2-7:求三角形面积 63
2.4 本章小结 64
2.5 习题 65
第3章 Java面向对象程序设计 66
3.1 面向对象编程 66
3.1.1 对象和类 66
3.1.2 面向对象程序设计 67
3.1.3 OOP的4个基本特征 68
3.2 类与对象 69
3.2.1 定义类 69
3.2.2 创建和使用对象 70
3.2.3 案例3-1:测试圆类 71
3.2.4 构造方法 72
3.2.5 析构方法 73
3.2.6 案例3-2:Person类 73
3.3 访问控制 75
3.3.1 包与类的访问控制 75
3.3.2 成员的访问控制与属性方法 76
3.3.3 案例3-3:使用权限修饰符的Person类 76
3.4 类变量、类常量和类方法 78
3.4.1 实例变量、类变量和类常量 78
3.4.2 变量的作用域与this关键字 79
3.4.3 实例方法和类方法 80
3.4.4 案例3-4:银行账户 81
3.5 类的方法重载 83
3.5.1 方法的参数类型 83
3.5.2 案例3-5:演示方法的参数类型 83
3.5.3 方法重载 85
3.6 类的继承 86
3.6.1 继承的基本概念 86
3.6.2 创建子类 86
3.6.3 方法覆盖 89
3.6.4 案例3-6:用继承的方式定义Student类和Teacher类 90
3.7 抽象类、接口及多态性 92
3.7.1 抽象类 92
3.7.2 案例3-7:一组图形类 93
3.7.3 接口 96
3.7.4 案例3-8:模拟学生管理系统的数据访问层和逻辑层 100
3.7.5 多态性 103
3.8 最终类和内部类 103
3.8.1 最终类 103
3.8.2 内部类 103
3.8.3 案例3-9:内部类使用演示 105
3.9 Java枚举类型 107
3.9.1 枚举类型概述 107
3.9.2 案例3-10:Week枚举类型 109
3.10 本章小结 110
3.11 习题 111
第4章 数组与集合 113
4.1 数组 113
4.1.1 数组的概念 113
4.1.2 数组的定义 113
4.1.3 案例4-1:成绩排序和统计 115
4.2 Collection 117
4.2.1 Java集合框架 117
4.2.2 Collection接口常用方法 117
4.2.3 遍历Collection 118
4.2.4 Collection的批量操作 119
4.3 集 120
4.3.1 HashSet类 120
4.3.2 案例4-2:用HashSet存储用户对象 121
4.3.3 TreeSet类 123
4.3.4 案例4-3:使用TreeSet存储学生对象 123
4.4 列表 126
4.4.1 List接口 126
4.4.2 ArrayList类 127
4.4.3 案例4-4:竞赛评分程序 128
4.4.4 Vector类 131
4.5 映射 131
4.5.1 Map接口 131
4.5.2 HashMap类 132
4.5.3 案例4-5:购物车 132
4.5.4 Hashtable类 135
4.6 Collections和Arrays 136
4.6.1 Collections类 136
4.6.2 Arrays类 137
4.7 本章小结 138
4.8 习题 139
第5章 GUI程序设计 141
5.1 Java图形API 141
5.1.1 AWT与Swing 141
5.1.2 图形API与Swing组件结构 142
5.1.3 怎样在容器中添加组件 143
5.2 图形界面基础 143
5.2.1 窗口 143
5.2.2 案例5-1:学生管理系统启动界面和主界面设计 145
5.2.3 对话框 147
5.2.4 常用组件 149
5.2.5 案例5-2:登录窗口 151
5.3 菜单和工具栏 153
5.3.1 菜单 153
5.3.2 案例5-3:为学生管理系统主界面设计菜单 155
5.3.3 工具栏 158
5.3.4 案例5-4:为学生管理系统主界面增加工具栏 159
5.4 界面布局和其他组件使用 160
5.4.1 界面布局 160
5.4.2 案例5-5:布局演示 162
5.5 其他组件的使用 166
5.5.1 其他组件介绍 166
5.5.2 案例5-6:添加学生界面设计 169
5.6 事件处理机制 170
5.6.1 事件处理模型 171
5.6.2 事件处理 172
5.6.3 常用事件 174
5.6.4 案例5-7:利用鼠标和键盘控制图片显示 175
5.7 图形图像基础 178
5.7.1 设置字体 178
5.7.2 设置颜色 179
5.7.3 Graphics类与绘图方法 180
5.7.4 案例5-8:绘制一个小车 181
5.7.5 2D绘图简介 183
5.7.6 显示图像 184
5.7.7 案例5-9:按不同方式显示图像 185
5.8 本章小结 186
5.9 习题 186
第6章 Java数据库编程 188
6.1 JDBC简介 188
6.1.1 什么是JDBC 188
6.1.2 JDBC的重要类和接口 189
6.2 基于JDBC编写数据库程序 189
6.2.1 设计准备 189
6.2.2 案例6-1:学生管理系统数据库设计 194
6.2.3 使用JDBC访问数据库的一般步骤 196
6.2.4 应用MVC设计模式 196
6.3 数据库的连接 197
6.3.1 DriverManager 197
6.3.2 Connection 197
6.3.3 使用JDBC-ODBC桥实现数据库的连接 198
6.3.4 使用纯Java JDBC驱动程序 198
6.3.5 案例6-2:连接学生管理数据库 200
6.4 数据的基本操作 201
6.4.1 数据操作的基本原理 201
6.4.2 常用的查询方法 203
6.4.3 案例6-3:显示学生数据 204
6.4.4 更新数据 208
6.4.5 案例6-4:修改学生数据 209
6.4.6 事务处理 214
6.5 数据查询界面设计 214
6.5.1 案例6-5:以表格形式显示学生数据查询结果 214
6.5.2 案例6-6:分页显示学生数据查询结果 217
6.6 使用存储过程 222
6.6.1 存储过程的定义 222
6.6.2 调用存储过程 223
6.6.3 案例6-7:使用存储过程查询学生成绩 224
6.7 大对象的存取 227
6.7.1 大对象存储的基本方法 227
6.7.2 案例6-8:设置学生照片 228
6.8 本章小结 232
6.9 习题 232
第7章 流和文件 234
7.1 文件管理基础 234
7.1.1 使用File类管理文件 234
7.1.2 案例7-1:递归显示或删除文件 237
7.1.3 过滤器与文件选择对话框 238
7.2 字符流与文本文件读写 242
7.2.1 字符流简介 242
7.2.2 文件字符流 243
7.2.3 案例7-2:用字符流复制文件 244
7.3 字节流与二进制文件读写 246
7.3.1 字节流简介 246
7.3.2 文件字节流简介 247
7.3.3 案例7-3:用字节流复制文件 248
7.4 数据流和对象流 250
7.4.1 数据流简介 250
7.4.2 案例7-4:使用数据流读写文件 251
7.4.3 对象流简介 252
7.4.4 案例7-5:以对象为单位读写数据 253
7.5 文件的随机读写 254
7.5.1 RandomAccessFile简介 254
7.5.2 案例7-6:随机读写文件 254
7.6 本章小结 256
7.7 习题 256
第8章 多线程与Applet 258
8.1 线程概述 258
8.1.1 线程与进程 258
8.1.2 线程的优点 259
8.1.3 线程体与线程载体 259
8.2 线程的创建 259
8.2.1 实现Runnable接口创建线程 259
8.2.2 案例8-1:为学生管理系统增加状态栏 260
8.2.3 扩展Thread类建立线程 261
8.2.4 案例8-2:利用线程设计启动界面 262
8.2.5 建立线程的两种方法的比较 263
8.2.6 Thread类 264
8.3 线程的状态与控制 264
8.3.1 线程的状态 264
8.3.2 线程的控制 266
8.3.3 案例8-3:图片切换 268
8.3.4 线程组 271
8.4 线程的优先级 272
8.4.1 Java线程优先级 272
8.4.2 案例8-4:数数程序 272
8.5 线程同步 274
8.5.1 Java线程同步机制 274
8.5.2 案例8-5:取款和存款 275
8.5.3 死锁 277
8.6 线程通信 278
8.6.1 Java线程通信机制 278
8.6.2 案例8-6:哲学家用餐问题 279
8.6.3 “生产者-消费者”问题 281
8.6.4 案例8-7:吃苹果 281
8.7 线程新特征 284
8.7.1 阻塞队列与障碍器 284
8.7.2 线程池、锁及条件变量 286
8.7.3 案例8-8:不能透支的取款和存款 288
8.8 Applet程序设计 291
8.8.1 Applet程序原理 291
8.8.2 案例8-9:在Applet中随机画圆 293
8.8.3 Applet中实现动画的基本原理 294
8.8.4 案例8-10:在Applet中实现动画 295
8.8.5 向Applet传递参数 297
8.8.6 案例8-11:绘制统计图 297
8.9 本章小结 298
8.10 习题 299
第9章 Java网络编程 300
9.1 网络编程基础 300
9.1.1 网络基本概念 300
9.1.2 网络协议 301
9.2 获取网络信息 302
9.2.1 获取网络地址信息 302
9.2.2 案例9-1:通过InetAddress获取主机名或IP 303
9.2.3 获取网络资源属性 304
9.2.4 案例9-2:通过URL获取络资源属性 305
9.3 访问网络资源 306
9.3.1 获取网络资源 306
9.3.2 案例9-3:读取网络文本文件 307
9.3.3 使用JEditorPane浏览HTML网页 309
9.3.4 案例9-4:简单的浏览器 310
9.4 基于TCP/IP协议的通信 312
9.4.1 客户机/服务器模式和套接字 312
9.4.2 客户端程序的原理 313
9.4.3 案例9-5:TCP的客户端程序 314
9.4.4 服务器程序的原理 318
9.4.5 案例9-6:TCP服务器端程序 319
9.5 基于UDP/IP协议的通信 324
9.5.1 数据报通信的原理 324
9.5.2 案例9-7:基于数据报的主机通信 325
9.6 本章小结 329
9.7 习题 329
参考文献 331
Java语言最新实用案例教程
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×