背景
有时候我们在定义数据结构的时候,比如List,HashMap等等,因为我们不知道提前装在里面的是什么,所以我们可以先定义它为Object的数据类型,形如控制器的代码如下,那什么是Object类,它有哪些方法,我们怎么去理解它了?
// 测试包装成另外的json结构
@GetMapping("/jstest")
public Map<String,Object> test1_json(){
Map<String,Object> hmap = new HashMap<>();
List<String> list = new ArrayList();
list.add("tom");
list.add("rose");
hmap.put("data",list);
hmap.put("code","1000");
return hmap;
}
Object类是什么
Object类是java默认的提供的一个类,Object类是所有类的父类,也就是说任何一个类的定义的时候如果没有明确的继承一个父类的话,那么它就是Object的子类;
也就是说以下两种类的定义的最终效果是完全相同的:
class Person { }
class Person extends Object { }
看到这个语法的时候,我们有没有觉得,这个和Python2.x中的类是不是一样的?你的觉得是正确的,Python中Object属于基类,也是所有类的父类。
Object 类属于java.lang
包,不需要额外的添加Maven依赖,也就是说我们可以理解为Python中的标准库的内容,而在Java中是就是JDK中的内容。
Object类有哪些方法
我们在使用IDEA开发工具的时候,我们点击Object,然后按住 Ctrl 键,进入源码模式。我们可以看到:
Object提供了11 个方法,那么这些方法分别是什么,又又什么用了?
1. clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable
接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
2. getClass方法
final方法,返回Class类型的对象,反射来获取对象。
3. toString方法
该方法用得比较多,取得对象信息,返回该对象的字符串表示。
4. finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
5. equals方法
比较对象内容是否相同
6. hashCode方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
7. wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
- 其他线程调用了该对象的notify方法。
- 其他线程调用了该对象的notifyAll方法。
- 其他线程调用了interrupt中断该线程。
- 时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
8. notify方法
该方法唤醒在该对象上等待的某个线程。
9. notifyAll方法
该方法唤醒在该对象上等待的所有线程
JSONObject
JSONObject是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。
(1)实例化一个JSONObject 对象,用put() 方法将数据写入。
// 实例化一个JSONObject 对象,用put() 方法将数据写入
JSONObject obj = new JSONObject();
obj.put(key, value);
(2)创建好一个 HashMap 对象并且将数据打包进去,而后在创建 JSONObject 时将其作为一个参数传进去。
Map<String, Object> data = new HashMap<String, Object>();
data.put("name", "John");
data.put("sex", "male");
data.put("age", 22);
data.put("is_student", true);
data.put("hobbies", new String[] {"hiking", "swimming"});
JSONObject obj = new JSONObject(data);
// 或是下面这种写法,将 java 对象转换为 json 对象
JSONObject obj = JSONObject.fromObject(data);
解析json数据
(1)只包含一个对象的 json 字符串解析
//将得到json数据转换为一个json对象
JSONObject jsonObject = new JSONObject(data);
//获取"persons"的json对象
jsonObject = jsonObject.getJSONObject("persons");
//通过相应的get方法,获取相应的属性
int id = jsonObject.getInt("id");
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
//将获取到的数据放到一个Person对象中
Person person = new Person(id, name, age);
(2)含有多个对象的 json 字符串
List<Person> list = new ArrayList<>();
//将得到json数据转换为一个json对象
JSONObject jsonObject = new JSONObject(data);
//获取"persons"的json对象,并将其转换为一个json数组
JSONArray array = jsonObject.getJSONArray("persons");
//通过循环获取数据,并放入list集合中
for (int i = 0;i<array.length();i++){
int id = array.getJSONObject(i).getInt("id");
String name = array.getJSONObject(i).getString("name");
int age = array.getJSONObject(i).getInt("age");
Person person = new Person(id, name, age);
list.add(person);
}
return list;