《Oracle Java SE编程指南》16-01:解密Obje

2020-04-24  本文已影响0人  AT阿宝哥
课程封面-JavaSE-AT阿宝哥

内容导航


前言

亲,Object是一个非常重要的类,不是对象!而且,对象只能是类类型和数组类型的实例。


1、单继承和父类

Java中的类遵循单继承机制,有如下情况:

因此,任何类都是Object的派生类或者子类。甚至我们随意创建一个类,就可以使用Object类的方法。

示例代码-Parent :


package com.company.project.demo0101;

//隐式继承Object
//public class Parent extends Object 
public class Parent {

    public Parent() {

    }

}

示例代码-Child :


package com.company.project.demo0101;

//显式继承Parent
public class Child extends Parent {

    public Child() {

    }

}


示例代码-Client :


package com.company.project.demo0101;

public class Client {

    public static void main(String[] args) {

        // 任何类都是Object的派生类或者子类
        Parent parent = new Parent();

        System.out.println(parent.equals(null));
        System.out.println(parent.getClass());
        System.out.println(parent.hashCode());
        System.out.println(parent.toString());

        Child child = new Child();

        System.out.println(child.equals(null));
        System.out.println(child.getClass());
        System.out.println(child.hashCode());
        System.out.println(child.toString());

    }

}

运行结果:


false
class com.company.project.demo0101.Parent
2018699554
com.company.project.demo0101.Parent@7852e922
false
class com.company.project.demo0101.Child
1311053135
com.company.project.demo0101.Child@4e25154f


2、Object类的地位和作用

Object类,在java.lang包下,位于类层次结构树的顶部,是类层次结构的根类。每个类都使用 Object 作为超类。所有对象,包括数组,都实现了Object类的方法。因此,每个类都是Object类的直接或间接后代。

示例代码:


package com.company.project.demo0102;

public class Client {

    public static void main(String[] args) {

        // 数组也是Object的子类
        int[] array = new int[0];

        System.out.println(array.equals(null));
        System.out.println(array.getClass());
        System.out.println(array.hashCode());
        System.out.println(array.toString());

    }

}

运行结果:


false
class [I
2018699554
[I@7852e922

注意:
我们使用或编写的每个类都继承了Object的实例方法。一般情况下,不需要直接使用这些方法,但是,如果要用,那么就需要覆盖它们。


3、Object类的源码

在JDK安装根目录下找到并解压缩src.zip文件,定位到src\java\lang目录,使用记事本打开Object.java文件可查看其源码。

官方源码:


package java.lang;

public class Object {

    private static native void registerNatives();

    static {
        registerNatives();
    }

    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 {
    }
}


4、Object类的方法

Object类中总共定义了11个方法,本章节讨论的从Object继承的方法有六个:

Object类的notify、notifyAll和wait方法都在同步程序中独立运行的线程的活动中起作用,这将在后面的课程中讨论,这里不做介绍。有五个方法:


示例代码:




package com.company.project.demo0104;

//Object类在java.lang包中,不用显式import

import java.lang.Object;

public class Client {

    public static void main(String[] args) {
        // 创建Object对象
        Object object = new Object();

        // Object类的常用方法
        System.out.println(object.equals(null));
        System.out.println(object.getClass());
        System.out.println(object.hashCode());
        System.out.println(object.toString());

//      object.notify();
//      object.notifyAll();
//      object.wait();
//      object.wait(1000L);
//      object.wait(100L, 20);

    }

}


运行结果:


false
class java.lang.Object
2018699554
java.lang.Object@7852e922

持续更新,欢迎留言提议!
码字很累,多点赞多赞赏!


扫描二维码,关注AT阿宝哥
上一篇 下一篇

猜你喜欢

热点阅读