• Java中常用的API(一)——Object


    概述

    如果要问Java为什么是用起来非常舒服的语言,那很大一部分的功劳就是JavaAPI的。API定义了许多封装好的类和方法供我们使用,来处理特定的问题,所以学习常用的API是非常重要的。
    同时,面向对象的核心思想就是用合适的对象去做合适的事情。什么是合适的对象呢?一种是自己根据需要创建的类而生成的对象,另一种是sun官方描述的好多常用的类,我们使用这些类创建的对象,这也就是API的概念。
    sun定义的那么多类的终极父类是Objec类。Object描述的是所有类的通用属性与方法。
    所以,API的介绍就是从Object类开始的。

    Object对象

    1. toString方法:返回的是对象的描述信息
    当我们直接输出一个对象的时候,这时候就会调用被输出对象的toString方法。代码如下:

    class Person{
        public String name;
        public String sex;
        public int age;
    
        public Person(String name,String sex,int age){
            this.age = age;
            this.name = name;
            this.sex = sex;
        }
    }
    public class Demo1 {
        public static void main(String[] args){
            System.out.println(p);
        }
    }

    代码执行后输出的结果是:java.lang.Object@de6ced
    可以看出,直接调用toString方法输出的是:类名@哈希码值的十六进制形式。
    对于上述代码,如果给出的需求是这样的:调用输出方法的时候,输出这个对象(Person)姓名、年龄、性别。这个时候又应该如何实现呢?
    根据我们之前学的继承,假如父类的指定的功能不能满足要求,那么子类可以复写父类的功能函数。那么该对象再调用toString()方法时,则会调用子类复写的toString方法。
    所以为了达到这个目的,需要对Person类的toString方法重写。

    //重写toString方法
    public String toString(){
        return "姓名:" + name + " 性别:" + sex + " 年龄" + age;
    }

    这个时候,输出的内容就满足我们的需求了。
    这里一个重要的编程习惯就是:我们在进行开发时,要对自定义的类重写toString方法,对对象进行详细的描述说明。

    2. equals方法:返回的是比较的结果
    利用equals方法来比较两个对象,如果相等返回true,否则false,比较的是对象的内存地址值。

    public class Demo1 {
        public static void main(String[] args){
            Person p = new Person("王浩","男",33);
            Person p1 = new Person("王浩","男",33);
            System.out.println(p.equals(p1));
        }
    }

    还是使用Person这个类,创建的两个对象。根据我们前面学习的知识,比较之后输出的结果肯定是false。因为创建的这两个对象的内存地址不同,所以会产生这样的输出结果。
    如果我们将代码这样改写:

    public class Demo1 {
        public static void main(String[] args){
            Person p = new Person("王浩","男",33);
            Person p1 = p;
            System.out.println(p.equals(p1));
        }
    }

    这时候,输出的结果就是true了。因为此时p和p1指向的是同一块内存地址。
    那么,接下来我们有一个需求:将equals比较的条件换成姓名、性别、年龄,如果以上三项相同,则表示相同。根据toString方法的启示,这里当然也要对equals方法进行重写。

    class Person{
        public String name;
        public String sex;
        public int age;
    
        public Person(String name,String sex,int age){
            this.age = age;
            this.name = name;
            this.sex = sex;
        }
        public boolean equals(Object obj){
            Person p = null;
            //判断obj对象是否属于Person类
            if(obj instanceof Person){
                //obj对象如果是Person的类,则对obj进行类型转换
                p = (Person)obj;
            }
            if(this.name.equals(p.name)&&this.sex.equals(p.sex)&&this.age==p.age){
                return true;
            }
            return false;
        }
    }
    public class Demo1 {
        public static void main(String[] args){
            Person p = new Person("王浩","男",33);
            Person p1 = new Person("王浩","男",33);
            System.out.println(p.equals(p1));
        }
    }

    此时输出的结果就是true了。
    注意:代码中的instanceof的作用是判断某个对象是否属于某个类,这个关键字的应用还是相当广范的。
    最后,我们要对自定义的类重写equals(),使得比较两个对象的时候比较对象的属性是否相等,而不是内存地址

    3. hashCode方法:返回该对象的哈希码值
    这个方法采用系统底层的哈希算法实现,同一个对象的呷西码是唯一的,同时,java规定如果两个对象equals返回true,那么这两个对象的hashCode码必须一致。
    所以,一旦对equals方法重写,那么一般来讲也要对hashCode方法重写。对于hashCode方法不做过多赘述。

  • 相关阅读:
    《结对-贪吃蛇游戏-测试过程》
    《课后作业-阅读任务-阅读提问-2》
    课后作业-阅读任务-阅读提问-3
    《20171005-构建之法:现代软件工程-阅读笔记》
    《结对-贪吃蛇游戏-项目进度》
    《团队-科学计算器-项目进度》
    《团队-科学计算器-代码设计规范》
    《团队-科学计算器-开发环境搭建过程》
    自制3D打印机---挤出头
    __construct 与 ThinkPhp _initialize 的区别
  • 原文地址:https://www.cnblogs.com/roobtyan/p/9576732.html
Copyright © 2020-2023  润新知