Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java中常用的API(一)——Object

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

作者头像
roobtyan
发布于 2019-02-21 07:51:11
发布于 2019-02-21 07:51:11
51300
代码可运行
举报
运行总次数:0
代码可运行

概述

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

Object对象

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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方法重写。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//重写toString方法
public String toString(){
    return "姓名:" + name + " 性别:" + sex + " 年龄" + age;
}

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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。因为创建的这两个对象的内存地址不同,所以会产生这样的输出结果。 如果我们将代码这样改写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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方法进行重写。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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方法不做过多赘述。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年02月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaApi高级编程(一)Object以及equals和==的区别
目录 一、Api概念 A、应用程序接口 B、函数与类的集合 二、java的数据类型 1、值类型 2、引用类型 三、equals和==用法的区别 1、==用于比较地址 2、equals用于比较对象存的内容 四、object类 1、toString()方法 2、equals()方法 以上知识就分享到这里,希望对大家有帮助 ---- 一、Api概念 1、API(application programming interface A、应用程序接口 B、函数与类的集合 二、java的数据类型 1、值类型 值类
天蝎座的程序媛
2022/11/18
2090
Java内功心法,Set集合的详解 ​
Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素
李红
2019/09/19
5340
Java内功心法,Set集合的详解 ​
深入理解Java中的Object类的equals()和hashCode()
在Java编程中,Object类是所有类的基类,它提供了一些基本的方法来操作对象。其中,equals()和hashCode()是两个重要的方法,它们在处理对象比较和哈希码计算方面具有关键作用。本文将深入探讨这两个方法的联系以及它们在Java编程中的应用。
IT_陈寒
2023/12/13
3820
java反射详解
http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html#3143018 (挺牛逼的)
bear_fish
2018/09/20
3170
Java基础-常用API-Object类
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
每周聚焦
2024/12/23
940
Java基础-常用API-Object类
11.JAVA-Object类之finalize(),clone(),toString()等方法覆写
Object类是一个特殊的类,是所有类(包括数组,接口 )的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类,所以可以通过向上转型的方法使用类型为Object的变量指向任意类型的对象。
诺谦
2019/05/24
5360
第三阶段-Java常见对象:【第一章 Object类】
在讲解Object类之前,我们不得不简单的提一下什么是API,先贴一组百度百科的解释:
BWH_Steven
2019/08/09
4610
万类之父——Object
  Object类作为Java中的顶级类,位于java.lang包中。所有的类直接或者间接都继承自它。所以Object类中的方法在所有类中都可以直接调用。在深入介绍它的API时,先插一句它和泛型之间的关系。
用户1148394
2019/01/07
5260
抽象类与接口(3)(接口部分)
❤️❤️观察其内部结构我们可以知道在Comparable后面还有个<T>,在语法上这是泛型,之后会讲,这并不影响我们现在的思路,这个<T>中的T你写student类,后面的compareTo方法中的第一个参数就是student类,如上图。
E绵绵
2024/04/08
1330
抽象类与接口(3)(接口部分)
Java API (二):从 Object 类到正则表达式的核心详解
Object类是 Java 语言中唯一没有父类的类,所有类都直接或间接继承自它,这意味着任何 Java 对象都能调用 Object 类中的方法。
钮祜禄.爱因斯晨
2025/07/23
1200
Java API (二):从 Object 类到正则表达式的核心详解
java基础第十三篇之Collection
常见的几种数据结构: * 1.堆栈:先进后出 * 2.队列:先进先出 * 3.数组:查找快,增删慢 * 4.链表:查找慢,增删快 import java.util.LinkedList;
海仔
2019/08/05
5820
Effective Java通俗理解(上)
  这篇博客是Java经典书籍《Effective Java(第二版)》的读书笔记,此书共有78条关于编写高质量Java代码的建议,我会试着逐一对其进行更为通俗易懂地讲解,故此篇博客的更新大约会持续1个月左右。 第1条:考虑用静态工厂方法代替构造器   通常情况下我们会利用类的构造器对其进行实例化,这似乎毫无疑问。但“静态工厂方法”也需要引起我们的高度注意。   什么是“静态工厂方法”?这不同于设计模式中的工厂方法,我们可以理解它为“在一个类中用一个静态方法来返回这个类的实例”,例如: public st
用户1148394
2018/01/12
1.5K0
Effective Java通俗理解(上)
为什么重写对象equals方法要重写hashcode方法的真正原因!
javaGuide里说到了为什么要重写hashcode的原因: 3)为什么重写 equals 时必须重写 hashCode 方法? 如果两个对象相等,则 hashcode 一定也是相同的。两个对象相等,对两个对象分别调用 equals 方法都返回 true。但是,两个对象有相同的 hashcode 值,它们也不一定是相等的 。因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖。 hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 cl
名字是乱打的
2021/12/24
1.1K1
【IT领域新生必看】Java编程中的神奇对比:深入理解`equals`与`==`的区别
在Java编程中,比较对象是一个常见的操作。equals和==是两种常用的比较方式,但它们的工作原理和应用场景有所不同。对于初学者来说,理解equals与==的区别,是编写正确和高效代码的关键一步。本篇文章将详细介绍equals与==的定义、用法及其区别,帮助你全面理解这些重要概念。
E绵绵
2024/07/08
3990
JDK1.9-常用类Object
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/12/03
3980
object中提供的clone默认为浅克隆_接口的定义形式
cloneable其实就是一个标记接口,只有实现这个接口后,然后在类中重写Object中的clone方法,然后通过类调用clone方法才能克隆成功,如果不实现这个接口,则会抛出CloneNotSupportedException(克隆不被支持)异常。Object中clone方法:
全栈程序员站长
2022/11/04
5700
object中提供的clone默认为浅克隆_接口的定义形式
《JavaSE》---16.<抽象类&接口&Object类>
比如之前我们在面向对象系列中所提到的矩形、圆、花。他们都是图形。因此他们可以继承Shape类。而在Shape类中我们有draw方法。但是由于Shape类不是具体的图形。因此不会用到draw方法。而是矩形、圆、花它们用draw方法。因此draw方法其实在Shape类中无法具体实现。所以我们可以将Shape类设计成一个“抽象类”。而把其中的draw方法我们设计成“抽象方法”。
用户11288958
2024/09/24
1430
《JavaSE》---16.<抽象类&接口&Object类>
Java基础(九):Object 类的使用
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++等非Java语言实现的,并且被编译成了DLL,由Java去调用
Java微观世界
2025/01/21
2070
Java基础(九):Object 类的使用
Object类常用方法
方法签名:public String toString() ① 默认情况下,toString()返回的是“对象的运行时类型 对象的hashCode值(16进制)" ② 在进行String与其它类型数据的连接操作时,自动调用toString()方法
CODER-V
2023/03/04
3930
深入了解Java中的Object类
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
喵手
2023/11/18
3700
深入了解Java中的Object类
推荐阅读
相关推荐
JavaApi高级编程(一)Object以及equals和==的区别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验