java.lang.Object

Java Object类详解

万物皆对象。Object类是类层级结构的根, 是所有类的超类。所有的对象都要实现其中的方法。

Object类有十几个方法,除了toString(), equals(), finalize()三个方法外,其他的方法全是native方法,即在C代码中实现的的方法。

Object中的所有方法,除了registerNatives()方法是私有的,其他的方法都可以被子类重写。

1、toString()方法:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

默认返回类名@地址

 

2、equals()方法:

public boolean equals(Object obj) {
    return (this == obj);
}

object的equals,JLS(java language specification)中是这么描述的

The method equals defines a notion of object equality, which is based on value,
not reference, comparison.

也就是比较的是值,而不是比较的引用。 这也验证了java的方法传参实际上是值传参,而不是引用传参。

子类重新equals方法的时候,需要注意,要同时重写hashCode方法,因为在java规范的公共契约里面规定了,相同的对象一定是具有相同的hashcode。不过额外提一句,就是具有相同hashcode的对象未必是同一个对象。

 

3、finalize()方法:

是垃圾回收时,jvm触发的对象销毁前执行的方法。子类可以重写这个方法来指定对象销毁时要执行的内容,但是一般不建议改写。如果改写不好,会影响垃圾回收效率,可能会导致无法回收或者回收缓慢而造成内存溢出的情况。

`Attempt to invoke virtual method 'java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[])' on a null object reference` 错误表明在调用 `Method.invoke` 方法时,`Method` 对象为 `null`。在 `com.oplus.atlas.OplusMessageHandler` 中,若出现此错误,可能是在获取 `Method` 对象时出现问题,或者在使用该对象之前未进行空值检查。 以下是解决该错误的一些方法: 1. **空值检查**:在调用 `invoke` 方法之前,对 `Method` 对象进行空值检查。示例代码如下: ```java import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class OplusMessageHandler { public void handleMessage() { Method ledCtl = null; Object proxy = new Object(); // 模拟获取 Method 对象 try { Class<?> proxyClass = proxy.getClass(); ledCtl = proxyClass.getMethod("ledCtl", int.class, int.class); } catch (NoSuchMethodException e) { e.printStackTrace(); } if (ledCtl != null) { try { for (int i = 0; i < 4; i++) { ledCtl.invoke(proxy, i, 1); } } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } else { System.err.println("Method ledCtl is null."); } } } ``` 2. **确保方法存在**:检查调用的方法名和参数类型是否正确。若方法名或参数类型不匹配,`getMethod` 方法将返回 `null`。 3. **检查类加载**:确保调用的类已经正确加载。若类未正确加载,`getMethod` 方法也会返回 `null`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值