网站首页 > 知识剖析 正文
如果说卷 I 是Java的“内功心法”,那么卷 II 就是Java的“兵器谱”和“实战手册”。它专注于Java平台提供的各种高级API,教你如何利用这些工具来构建功能强大、与外部世界交互的应用程序。
这份总结将带你领略Java在I/O、网络、数据库、安全等领域的强大能力。
《Java核心技术·卷 II》知识点精粹总结
引言:为什么需要这本书?
当你掌握了卷 I 的核心语言特性后,你会发现实际的应用开发远不止于此。你需要读写文件、连接网络、操作数据库、处理XML数据等等。卷 II 就是为此而生,它全面介绍了Java标准库中用于解决这些实际问题的高级API。
第一部分:文件与I/O (Input/Output)
这部分是构建任何非“Hello World”应用的基石,因为程序总是需要与数据源打交道。
1. 流 (Streams) 与java.io
- 核心概念:Java I/O 基于“流”模型,数据像水流一样单向流动。
- 两大类流:字节流 (Byte Streams):以字节(8位)为单位处理数据。基类是 InputStream 和 OutputStream。适用于处理任何类型的数据,如图片、视频、二进制文件。字符流 (Character Streams):以字符(16位 Unicode)为单位处理数据。基类是 Reader 和 Writer。专门用于处理文本数据,能正确处理各种字符编码。
- 装饰器模式 (Decorator Pattern):这是 java.io 的精髓。通过将一个流“包装”或“链接”到另一个流,来动态地增加功能。示例:new DataInputStream(new BufferedInputStream(new FileInputStream("data.bin")));FileInputStream:提供从文件读取字节的基本功能。BufferedInputStream:增加了缓冲功能,提高读取效率。DataInputStream:增加了读取基本数据类型(如readInt(), readDouble())的功能。
2. 新I/O (NIO.2 -java.nio)
- 为什么需要NIO?:java.io 的API存在一些局限,如阻塞I/O、对文件系统属性的访问有限等。NIO(New I/O)提供了更现代化、更高效的解决方案。
- 核心组件:Path 和 Files:这是现代文件操作的入口。Path 是一个表示文件或目录路径的接口,Files 是一个包含大量静态工具方法的类。优点:提供了更强大、更直观的文件操作,如 Files.copy(), Files.move(), Files.walkFileTree()(遍历目录树),并且能更好地处理符号链接和文件属性。通道 (Channels) 和 缓冲区 (Buffers):概念:数据总是从通道读入缓冲区,或从缓冲区写入通道。这是NIO的核心数据传输方式。优势:支持非阻塞I/O (Non-blocking I/O)。一个线程可以管理多个通道,当某个通道有数据可读/可写时,Selector(选择器)会通知线程,极大地提高了服务器处理大量并发连接的效率。内存映射文件 (Memory-mapped Files):一种将文件或文件的一部分直接映射到内存中的技术,可以像操作内存数组一样读写文件,对于大文件的处理非常高效。
第二部分:网络编程 (Networking)
这部分讲解了如何让你的Java程序通过网络进行通信。
3. 基础网络编程
- InetAddress:代表一个IP地址,用于主机名和IP地址之间的转换。
- 套接字 (Sockets):网络通信的基础。Socket:客户端使用的类,用于连接到指定的服务器和端口。ServerSocket:服务器端使用的类,用于监听客户端的连接请求。工作流程:服务器创建一个ServerSocket并调用accept()方法阻塞等待连接。客户端创建一个Socket尝试连接。连接成功后,双方通过各自Socket的InputStream和OutputStream进行通信。
- URL 和 URLConnectionURL 类用于表示一个统一资源定位符。URLConnection 允许你打开一个到URL的连接,并读取其内容、发送数据(如POST请求)、获取头信息等。HttpURLConnection是其针对HTTP协议的子类。现代替代方案:书中可能主要讲URLConnection,但自Java 11起,java.net.http.HttpClient 提供了更现代、更易用、功能更强的API(支持HTTP/2和异步操作)。
第三部分:数据库编程 (JDBC)
这部分是Java后端开发的核心技能,讲解如何与关系型数据库交互。
4. JDBC (Java Database Connectivity)
- 核心思想:提供一套统一的Java API,用于连接和操作各种不同的数据库,而无需关心底层数据库的具体实现细节(由数据库厂商提供的驱动程序负责转换)。
- 核心步骤:加载驱动:Class.forName("com.mysql.cj.jdbc.Driver"); (现在通常可以省略)建立连接:Connection conn = DriverManager.getConnection(url, user, password);创建语句:Statement stmt = conn.createStatement(); (用于执行静态SQL)PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?"); (强烈推荐,用于执行带参数的SQL,可以防止SQL注入,并且性能更好)执行SQL:ResultSet rs = pstmt.executeQuery(); (执行查询)int count = pstmt.executeUpdate(); (执行增、删、改)处理结果:使用 while (rs.next()) { ... } 遍历 ResultSet。关闭资源:务必在 finally 块或使用try-with-resources语句关闭 ResultSet, Statement, 和 Connection。
第四部分:高级主题与企业特性
这部分涵盖了企业级应用中常见的各种技术。
5. XML处理
- 背景:XML曾是数据交换和配置文件的主要格式。
- 两大解析模型:DOM (Document Object Model):将整个XML文件加载到内存中,形成一棵树状结构。优点是方便随机访问和修改,缺点是内存消耗大。SAX (Simple API for XML):基于事件的流式解析器。它顺序读取XML,每当遇到开始标签、结束标签、文本等时,会触发相应的回调方法。优点是内存占用小,速度快,适合处理大文件。
- JAXB (Java Architecture for XML Binding):一种更高级的技术,可以将Java对象自动与XML文档进行相互转换(编组/解组),大大简化了XML处理。
6. 国际化 (Internationalization - I18N)
- 目标:让你的程序能够适应不同的语言和地区,而无需修改源代码。
- 核心组件:Locale:一个代表特定地理、政治或文化区域的对象(如 Locale.US, Locale.CHINA)。资源包 (ResourceBundle):用于存储本地化文本。通常是一系列.properties文件(如 messages_en.properties, messages_fr.properties),程序会根据当前Locale自动加载正确的文件。格式化:DateFormat 和 NumberFormat 用于根据Locale格式化日期、时间和数字,以符合当地习惯(如日期格式MM/dd/yyyy vs dd/MM/yyyy,货币符号$ vs EUR)。
7. 安全 (Security)
- Java安全模型:基于“沙箱”(Sandbox)概念,限制不可信代码(如下载的Applet)的权限,保护本地系统。
- 主要内容:类加载器:通过不同的类加载器隔离来自不同来源的代码。代码签名:使用数字证书为代码签名,证明其来源和完整性,从而获得更多权限。加密与解密:介绍了Java加密体系结构(JCA),包括:MessageDigest:用于生成哈希值(如MD5, SHA-256)。Cipher:用于对称加密(AES)和非对称加密(RSA)。KeyStore:用于安全地存储密钥和证书。
8. 其他高级主题
- 脚本API (javax.script):允许在Java程序中嵌入和执行脚本语言(如JavaScript),实现动态逻辑。
- 注解处理 (Annotation Processing):讲解了如何编写注解处理器,在编译时扫描源代码中的注解,并自动生成代码(Lombok就是一个典型应用)。
- Java本地接口 (JNI - Java Native Interface):一座连接Java世界和本地代码(C/C++)世界的桥梁。用于调用已有的C/C++库,或在性能要求极高的场景下使用。使用起来非常复杂,需要小心管理内存。
总结
《Java核心技术·卷 II》是一本实践性极强的宝库。它告诉你,当基础语法和面向对象思想不足以解决问题时,Java平台为你准备了哪些强大的“官方武器”。读完这本书,你将:
- 精通文件I/O,无论是传统的流式处理还是现代的NIO。
- 具备网络编程能力,能编写客户端/服务器应用。
- 熟练使用JDBC,安全、高效地与数据库进行交互。
- 理解企业级应用中的常见需求,如XML处理、国际化和安全性。
- 了解Java与其他技术(如C++、脚本语言)集成的可能性。
这本书是从一个“Java语言使用者”转变为一个“Java平台开发者”的必经之路。
猜你喜欢
- 2025-09-29 Python开发爬虫的常用技术架构_python网络爬虫开发
- 2025-09-29 DISMTools v0.5.1 Update 1_DISMTools v0.5.1 Update 16
- 2025-09-29 Spring MVC 完整配置指南:WebMvcConfigurer 实战全解析
- 2025-09-29 Python3 XML解析:探索数据交换与处理的高效工具(38)
- 2025-09-29 MyBatis3源码解析-执行SQL流程_mybatis3源码深度解析
- 2025-09-29 印度计算机应急响应小组警告:谷歌Chrome、Zoho软件存在多个漏洞
- 2025-09-29 什么是OWASP Top 10?web安全必读_owsl啥意思
- 2025-09-29 XXE漏洞_Xxe漏洞支持的伪协议不包括
- 2025-09-29 Android绘制流程_android图形绘制
- 2025-09-29 爬虫工具介绍_爬虫工具介绍ppt
- 最近发表
-
- 不用Flexbox, 一行代码搞定CSS居中难题
- 使用 HTML、CSS 和 JS 创建令人惊叹的粒子背景效果
- CSS样式隔离:12个技巧让冲突率降低75%
- Python开发爬虫的常用技术架构_python网络爬虫开发
- DISMTools v0.5.1 Update 1_DISMTools v0.5.1 Update 16
- Spring MVC 完整配置指南:WebMvcConfigurer 实战全解析
- Python3 XML解析:探索数据交换与处理的高效工具(38)
- 《Java核心技术·卷 Ⅱ》知识点总结
- MyBatis3源码解析-执行SQL流程_mybatis3源码深度解析
- 印度计算机应急响应小组警告:谷歌Chrome、Zoho软件存在多个漏洞
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)