3.4.1 Object类 & 3.4.2 包

3.4.1 Object类

Java提供了一个Object类,它是所有类的父类,每个类都直接或间接继承Object类,因此Object类通常被称之为超类。当定义一个类时,如果没有使用extends关键字为这个类显式地指定父类,那么该类会默认继承Object类。

Object类常用方法:

  • boolean equals(),判断两个对象是否“相等”
  • int hashCode(),返回对象的哈希码值
  • String toString(),返回对象的字符串表示形式

在实际开发中,通常希望对象的toString()方法返回的不仅仅是基本信息,而是对象特有的信息,这时可以重写Object类的toString()方法。

3.4.2 包

为了便于对硬盘上的文件进行管理,通常会将文件分目录存放。同理,在程序开发中,也需要将编写的类在项目中分目录存放,以便于文件管理。为此,Java引入了包(package)机制,程序可以通过声明包的方式对Java类分目录管理。

包通过package关键字声明,示例代码如下:

package com.entity.pt01; // 使用package关键字声明包
public class Example01{}

需要注意的是,包的声明只能位于Java源文件的第一行。

包的作用:

  1. 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
  2. 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
  3. 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

在开发时,一个项目中可能会使用很多包,当一个包中的类需要调用另一个包中的类时,需要使用import关键字引入需要的类。使用import关键字可以在程序中导入某个指定包下的类,这样就不必在每次用到该类时都书写完整类名,简化了代码量。使用import关键字导入某个包中的类的具体格式如下所示:
import 包名.类名;

import通常出现在package语句之后,类定义之前。如果需要用到一个包中的多个类,则可以使用“import 包名.*; ”导入该包下所有类。
例:

package com.entity.pt01;

import java.util.*; 	//导入java.util包下所有类
import com.entity.pt02.Test; 	//导入com.entity.pt02包下的Test类

public class Example01{}

在JDK中,不同功能的类都放在不同的包中,其中Java的核心类主要放在java包及其子包下,Java扩展的大部分类都放在javax包及其子包下。
Java语言中的常用包。

  • java.util:包含Java中大量工具类、集合类等,如Arrays、List、Set等。
  • java.net:包含Java网络编程相关的类和接口。
  • java.io:包含了Java输入、输出有关的类和接口。
  • java.awt:包含用于构建图形界面(GUI)的相关类和接口。

注意:java.lang包中的类,不需要import就可以使用,比如System类

### 3.1 JSONObject 详解 JSONObjectJava 中用于处理 JSON 数据的核心之一。它提供了一种轻量级的数据结构,能够方便地解析、生成和操作 JSON 格式的数据。JSON 对象本质上是一个键值对集合,似于 Java 中的 `Map<String, Object>`,但具备更强的 JSON 数据处理能力,支持嵌套结构、型转换等功能 [^1]。 ### 3.2 主要功能与用途 JSONObject 的主要功能括: - 解析 JSON 字符串为对象结构 - 将 Java 对象转换为 JSON 字符串 - 添加、删除、修改 JSON 对象中的键值对 - 支持嵌套 JSON 对象和 JSON 数组的处理 它广泛应用于 Web 开发中,特别是在 RESTful API 的数据交互过程中,常用于前后端数据传输和日志记录等场景 [^2]。 ### 3.3 常用方法 以下是一些 JSONObject 的常用方法及其用途: | 方法名 | 描述 | |--------|------| | `put(String key, Object value)` | 向 JSON 对象中添加键值对 | | `get(String key)` | 获取指定键的值 | | `getString(String key)` | 获取指定键的字符串值 | | `getInteger(String key)` | 获取指定键的整数值 | | `containsKey(Object key)` | 判断是否含指定键 | | `remove(String key)` | 删除指定键 | | `parseObject(String text)` | 静态方法,将 JSON 字符串解析为 JSONObject 对象 | | `toJSONString()` | 将 JSONObject 转换为 JSON 字符串 | ### 3.4 使用示例 #### 3.4.1 创建 JSONObject 对象 ```java import com.alibaba.fastjson.JSONObject; public class JSONObjectExample { public static void main(String[] args) { // 创建空的 JSONObject JSONObject jsonObject = new JSONObject(); // 添加键值对 jsonObject.put("name", "张三"); jsonObject.put("age", 25); jsonObject.put("isStudent", true); // 输出 JSON 字符串 System.out.println(jsonObject.toJSONString()); } } ``` 输出结果: ```json {"name":"张三","age":25,"isStudent":true} ``` #### 3.4.2 解析 JSON 字符串 ```java String jsonString = "{\"name\":\"李四\",\"age\":30,\"isStudent\":false}"; JSONObject parsedObject = JSONObject.parseObject(jsonString); System.out.println(parsedObject.getString("name")); // 输出:李四 System.out.println(parsedObject.getBoolean("isStudent")); // 输出:false ``` #### 3.4.3 嵌套 JSON 对象 ```java // 创建嵌套的 JSON 对象 JSONObject address = new JSONObject(); address.put("city", "北京"); address.put("zipCode", "100000"); JSONObject person = new JSONObject(); person.put("name", "王五"); person.put("address", address); System.out.println(person.toJSONString()); ``` 输出结果: ```json {"name":"王五","address":{"city":"北京","zipCode":"100000"}} ``` ### 3.5 JSONObject 与 Map 的对比 JSONObjectJava 中的 `Map<String, Object>` 似,但具备更丰富的 JSON 特性支持。例如: - **型安全**:JSONObject 提供了 `getString`、`getInteger` 等方法,避免型转换错误。 - **序列化与反序列化**:JSONObject 支持直接将对象转换为 JSON 字符串,从 JSON 字符串解析为对象。 - **嵌套结构**:JSONObject 支持嵌套 JSON 对象和 JSON 数组,而 Map 需要额外封装才能实现似功能 [^3]。 ### 3.6 常见 JSON 库实现 不同 JSON 库提供了各自的 JSONObject 实现,括: - `org.json.JSONObject`(原生 JSON 库) - `com.alibaba.fastjson.JSONObject`(FastJSON) - `net.sf.json.JSONObject`(JSON-lib) 不同库的 API 设计略有差异,但基本功能一致。选择时应考虑项目依赖、性能需求和社区支持等因素 。 ### 3.7 注意事项 - JSONObject 是一个抽象,实际使用中通常通过其子进行实例化。 - JSON 中的 `parseObject` 方法是静态方法,用于将 JSON 字符串解析为 JSONObject 对象。JSONObject 本身继承自 JSON,因此可以直接调用 `JSONObject.parseObject` [^5]。 - 在处理大型 JSON 数据时,建议使用流式解析器(如 Jackson、Gson)以提高性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值