专栏首页最高权限比特流Java中常用的API(一)——Object

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方法不做过多赘述。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • POST和GET方法乱码解决方案

    roobtyan
  • Java中常用的API(二)——String

    在第一节中我们介绍了Object类的方法以及操作,那么这一节,我们将介绍一个新的类:String。 String类是我们经常使用的类,应用十分广泛。同时,S...

    roobtyan
  • Ajax发送PUT/DELETE请求时出现错误的原因及解决方案

    大家应该都知道.在HTTP中,规定了很多种请求方式,包括POST,PUT,GET,DELETE等.每一种方式都有这种方式的独特的用处,根据英文名称,我们能够很清...

    roobtyan
  • java设计模式(2) 建造者模式,深复制与浅复制

    建造者模式 就是建造不同的东西,但是基本流程不变,将复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 //构建产品 public ...

    曼路
  • 经过性能对比,我发现温少的FastJson真牛。

    JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式,一般情况我们对于JSON解析构造的性能并不需要过于关心,除非是在性能要求比较高的系统。

    Spark学习技巧
  • GC优化案例4:虚引用过多导致CMS Remark阶段时间过长

    对GC优化的案例进行的系列总结(四): 现象 上图很明显(公司内部监控没有区分Old GC和Full GC)Old GC耗时严重,大致看了几天的监控,基本上每...

    于霆霖
  • CKafka系列学习文章 - 用java实现API调用(十一)

    导语:上一章节我们了解了怎么手动拼接请求URL和用API2.0签名自动生成请求URL,来调用CKafka的接口,这一章将进入开发阶段,用java实现拼接请求UR...

    发哥说消息队列
  • iOS Mirror的使用

    使用Mirror可以在不获取对象文件的情况下,知悉该对象所有的属性,不管是私有还是公开的。

    用户6094182
  • JDBC也就那么回事

      JDBC:Java DataBase Connectivity,是SUN公司提供的一套操作数据库的标准规范(技术)。

    泰斗贤若如
  • 计算机程序的思维逻辑 (14) - 类的组合

    上节我们通过类Point介绍了类的一些基本概念和语法,类Point中只有基本数据类型,但类中的成员变量的类型也可以是别的类,通过类的组合可以表达更为复杂的概念。...

    swiftma

扫码关注云+社区

领取腾讯云代金券