java.lang.Object介绍

本文深入探讨了Java中的Object类,它是所有类的基类,包含诸如`getClass()`、`hashCode()`、`equals()`等核心方法。此外,还讲解了native关键字的含义,表示方法的实现位于非Java代码中,以及final方法的作用,防止子类重写。

源码介绍

Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.

译文

Object类是类层次结构的根。Object类是每个类的父类。所有的对象,包括数组,都可以执行(调用)该类的方法。

该类中的方法如下所示:

public final native Class<?> getClass();

public native int hashCode();

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

protected native Object clone() throws CloneNotSupportedException;

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

public final native void notify();

public final native void notifyAll();

public final native void wait(long timeout) throws InterruptedException;

public final void wait(long timeout, int nanos) throws InterruptedException {
        if (timeout < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException(
                                "nanosecond timeout value out of range");
        }

        if (nanos > 0) {
            timeout++;
        }

        wait(timeout);
    }

public final void wait() throws InterruptedException {
        wait(0);
    }

protected void finalize() throws Throwable { }

还有一个是默认构造方法即

public Object(){}

稍微引申一点

native 方法

表示这个方法是有方法实现体的(所以该关键字不能与abstract连用)。其实现体由非java语言实现。

当一个带有本地方法的类被加载时,其相关的DLL并未被加载,因此指向方法实现的指针并不会被设置。

当native方法被调用前,其实现体(DLL文件)才会被加载到内存中。此时方法实现的指针会被设置。

final 方法

final方法表示该方法是最终方法,不能被子类重写。

参考

native介绍

`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`。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值