[object object]怎么取到里面的值_Object源码

cbd60a12b948cc203bd46b5aafe9fc1a.png

Object是JDK最基础的类,它是所有类的超类,现在让我们来分析一下它。

registerNatives()

/**
 * 对象初始化的时候,自动调用这个类
 */
private static native void registerNatives();
static {
    registerNatives();
}

getClass()

/**
 * 这个方法被final修饰,不能被子类重写,返回的是这个对象运行的类
 */
public final native Class<?> getClass();

hashCode()

/**
 * 主要用来判断两个对象是否相等
 * 1:如果两个对象相等,那么它们的hashcode一定相等 
 * 2:hashcode相等的,这两个对象不一定相等 
 * 3:hashcode不相等,那么这两个对象一定相等 
 */
public native int hashCode();

equals(Object obj)

/**
 * 判断两个对象是否相等
 * 主要比较的是内存地址,如果我们要比较两个对象里面的内容是否相等,那么我们就会重写这个方法。注意:重写          equals()方法的时候,也一定要重写hashcode()方法。
 * 因为java规定:两个对象相等,那么它们的hashcode也一定要相等。
 */
public boolean equals(Object obj) {
    return (this == obj);
}

clone()

/**
 * 用于对象的复制,这只是浅复制
 * 浅复制:对于基本数据类型进行值传递,对于引用数据类型的复制,只是复制引用的地址。
 * 深复制:对于基本数据类型进行值传递,对于引用数据的复制,会创建一个新的对象,然后复制里面的内容。
 */
protected native Object clone() throws CloneNotSupportedException;

toString()

/**
 * 返回该对象的字符串表示
 */
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

notify()

/**
 * final修饰,不能被重写,唤醒一个正在等待对象锁的线程,该方法只能用于同步方法。
 */
public final native void notify();

notifyAll()

/**
 * final修饰,不能被重写,唤醒所有正在等待对象锁的线程,该方法只能用于同步方法。
 */
public final native void notifyAll();

wait()

/**
* 在其他线程调用此对象的notify()方法或notifyAll()方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行  wait(0)调用一样。
* 当前线程必须拥有此对象监视器。
* 该线程发布对此监视器的所有权并等待,直到其他线程通过调用notify方法或notifyAll方法通知在此对象的监视器上等待的* 线程醒来,
* 然后该线程将等到重新获得对监视器的所有权后才能继续执行。
*/
public final void wait() throws InterruptedException {
    wait(0);
}

finalize()

/**
 * 用于对象被回收的时候这个由JVM支持,Object的finalize方法默认是什么都没有做,如果子类需要在对象被回收时执行一些逻辑处理,则可以重写finalize方法。
 */
protected void finalize() throws Throwable {     
}

总结

Object类是最基础的类,但是分析它也是不容易的事情,JDK源码博大精深,要坚持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`json_object_to_file_ext`函数的源码如下: ```c int json_object_to_file_ext(const char *filename, struct json_object *obj, int flags) { FILE *fp; int ret; if (!filename || !obj) return -1; fp = fopen(filename, "w"); if (!fp) return -1; ret = json_object_to_file_stream(fp, obj, flags); fclose(fp); return ret; } ``` `json_object_to_file_ext`函数与`json_object_to_file`函数非常相似,主要区别在于将json对象转换为字符串的方式。`json_object_to_file_ext`函数使用`json_object_to_file_stream`函数将json对象转换为字符串,并将其写入到文件中。 `json_object_to_file_stream`函数实现了将json对象转换为字符串的功能,其源码如下: ```c int json_object_to_file_stream(FILE *stream, struct json_object *obj, int flags) { const char *buf; int ret; if (!stream || !obj) return -1; buf = json_object_to_json_string_ext(obj, flags); if (!buf) return -1; ret = fprintf(stream, "%s", buf); free((void*)buf); return (ret > 0) ? 0 : -1; } ``` `json_object_to_file_stream`函数首先检查函数参数是否合法,如果文件句柄或json对象为空,则返回-1。 然后,函数调用`json_object_to_json_string_ext`函数将json对象转换为字符串,并将其存储在以NULL结尾的字符串缓冲区中。`json_object_to_json_string_ext`函数通过递归调用来处理json对象的嵌套结构,并根据传入的参数设置缩进符号、缩进级别等格式化信息。 最后,`json_object_to_file_stream`函数使用标准C库函数`fprintf`将字符串缓冲区中的内容写入到文件中,并释放缓冲区的内存。如果写入成功,则返回0,否则返回-1。 需要注意的是,`json_object_to_file_stream`函数不会自动为每个json对象添加换行符或缩进等格式化信息,生成的字符串是不带格式的纯文本。如果需要生成带格式的json字符串,可以使用`json_object_to_json_string_ext`函数,并设置相应的参数来指定缩进符号、缩进级别等格式化信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值