Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)

API–Application Programming Interface(提供一系列的接口以及接口下的类)

快速查找步骤指引:

1.点击索引,输入object(输入自己需要查看的类名即可),回车

Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)_第1张图片
2.默认选择第一个,点击显示

Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)_第2张图片
3.这边关于object类里的所有方法都会显示出来了

Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)_第3张图片
API里提供的所有方法要么被protected修饰要么被默认的public来修饰

Object类

1.概念

Object类是Java的顶级父类,每个类默认继承Object类。

2.重要方法

1)Clone():把原对象的属性值赋值到新对象中并且把新对象进行返回
类实现Cloneable接口产生对象才能支持克隆操作

Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)_第4张图片

代码演示:

package cn.tedu.object;
//当类实现Cloneable口产生的对象就能支持克隆操作
//在Cloneable上Crtl+鼠标左击--Cloneable接口是空接口没有内容
//当类实现接口时会给类添加一个标记,类产生的每个对象都会有这个标记
//当做克隆操作时检测出对象有标记就可以进行正常的克隆操作

public class ObjectDemo1 implements Cloneable{
    int i=1;
    public static void main(String[] args) throws CloneNotSupportedException {
        //创建对象(Object类的子类对象)
        ObjectDemo1 od=new ObjectDemo1();

        //调用父类Object类里的clone方法
        //Alt+回车--提示键
        //CloneNotSupportedException---克隆不支持异常
        ObjectDemo1 od1=(ObjectDemo1) od.clone();
        //克隆对象属性值和原对象的属性值一致
        System.out.println(od1.i);
        //false 把原对象的属性值赋值到新对象中
        System.out.println(od==od1);
    }
}

执行结果:

Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)_第5张图片2)finalize():通知系统进行垃圾回收

Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)_第6张图片

3)getClass():返回的Object的实际创建类的类型(包名+类名)

Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)_第7张图片

//创建对象
        ObjectDemo2 od=new ObjectDemo2();
        Object od1=new ObjectDemo2();
        //返回的是全路径名(包名+类名) 
        System.out.println(od.getClass());//class cn.tedu.object.ObjectDemo2
        //返回的是Object的实际创建类类型
        System.out.println(od1.getClass());
    }
}

4)hashcode():返回对象的哈希码值

Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)_第8张图片

//不同对象的哈希码值不一样
//哈希码值特点(1.取值范围广(41亿左右)  2.散列分布(均匀分布))
//哈希码值不会重复--内存地址值要唯一--用哈希码值代表地址值
System.out.println(new Object().hashCode());//460141958
//把十进制转成十六进制
System.out.println(Integer.toString(new Object().hashCode()));//1163157884

5)toString():拼接对象地址值
为了获取的是对象的属性值而不是地址值需要重写toString()

Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)_第9张图片

代码演示:

package cn.tedu.object;

public class ObjectDemo3 {
    public static void main(String[] args) {
       /* //创建对象
        ObjectDemo3 od=new ObjectDemo3();
        //od对象传入到底层valueOf()中要去调用Object类里的toString()
        //Object类里的toString方法默认给对象来拼接地址值
        System.out.println(od);//cn.tedu.object.ObjectDemo3@1b6d3586
        //od对象直接调用Object类里的toString()来拼接地址值
        System.out.println(od.toString());//cn.tedu.object.ObjectDemo3@1b6d3586*/


        //创建对象
        Person p=new Person();
        p.name="豆豆";
        p.age=25;
        p.gender='男';

        //底层默认还是调用Object类里的toString方法拼接地址值
        //调用Person类重写的toString方法来输出对象属性值
        System.out.println(p);
    }
}


//为了输出的是对象的属性值需要重写Object类toString方法
class Person{
    String name;
    int age;
    char gender;

    //重写Object类里的toString方法,为了获取对象的属性值
    //快捷键Ctrl+O---展示出可以重写的方法
/*    @Override
    public String toString(){
        return name+","+age+","+gender;
    }*/

    //java自动生成的重写toString方法
    @Override
    public String toString(){
        return"Person{"+"name='"+
                name+'\''+",age="+
                age+",gender="+gender+'}';
    }

}

执行结果:

在这里插入图片描述
6)equals():根据对象地址值来判断对象是否相等

为了更加全面的来判断对象是否相等根据对象地址值以及对象属性值来综合判断。需要重写equals方法(1.对象地址值 2.参数对象是否为null 3.两个对象类型 4.比较属性值)

Java---API之Object类( jdk1.8中文 百度翻译版 帮助文档)_第10张图片

代码演示:

package cn.tedu.object;

public class ObjectDemo4 {
    public static void main(String[] args) {
        //创建对象
        Student s1=new Student();
        s1.name="+想";
        s1.age=24;
        s1.gender='男';
        Student s2=new Student();
        s2.name="+想";
        s2.age=24;
        s2.gender='男';

        //Object类里的equals方法是根据对象地址值来判断对象是否相等
        System.out.println(s1.equals(new Object()));
    }
}

class Student{
    //属性
    String name;
    int age;
    char gender;

    //根据对象地址值以及属性值来综合判断对象是否相等
    //需要重写equals方法
    @Override
    public boolean equals(Object obj){

        //1.判断对象地址值是否相等
        if (this==obj){
            return true;
        }

        //2.判断参数对象是否为null
        if (obj==null){
            return false;
        }

        //3.判断两个对象的类型是否一致
        //把所有类型不同的情况都排除掉
        if(this.getClass() != obj.getClass()){
            return false;

        }

        //当代码执行到此行就表明从逻辑上两个对象的类型一致
        //但是从语法上而言两个对象的类型不一致
        Student s=(Student) obj;

        //比较对象的属性值

        //比较两个对象的年龄
        if (this.age != s.age){
            return false;
        }

        //比较两个对象的性别
        if (this.gender!=s.gender){
            return false;
        }

        //比较两个对象的姓名
        //根据两个name对象的地址值来判定name对象相等
        //name对象是String类型调用的是String类重写的equals方法
        //重写的方法---先比较对象地址值再比较对象的内容
        if(this.name==s.name){
            return true;
        }

        //两个对象不相等
        return false;
    }
}

执行结果:

在这里插入图片描述

你可能感兴趣的:(API,java,object,hashcode,jdk)