二十四、常用API之Object

前面学习的Java的语法基础, 后面的几篇介绍一下Java的常用API

那么什么是API?(Application Programming Interface,应用程序编程接口
API就是一组用于构建和集成应用软件的定义和协议。

学习类的过程就是学习Java的过程:换句话说学Java就是学习类

  • 首先,了解这个类是干啥的(看介绍)JDK帮助文档由官方类的解释
  • 看构造方法
  • 看常量或者静态属性
  • 看有哪些方法,静态方法还是成员方法 (这个API能实现什么功能)
  • 调用方法 (使用其中的功能)

Object是老祖宗类,所有类都继承Object类并实现了他所有的功能和方法

Object类型的构造方法

1、Object():空参数构造方法,该构造方法内,第一行没有super(),因为Object没有父类

用途:① 创建Object类型的对象

​ ② 子类去使用,所有的子类都会直接的或者间接的访问到这个顶层父类的构造方法
在JAVA中所有的类都默认继承Object类

java 复制代码
public class Demo01 {
    public static void main(String[] args) {
        //使用空参构造创建对象
        Object o1 = new Object();
        Person p = new Person();
        p.equals(o);//可以调用Object类中的方法,因为所有的类都是Object的子类,所以可以使用Object类中的方法
        Object o2 = new Person();//父类的引用指向子类对象
        //Object类型根据多态关系,可以接收任意类型的对象
        //所有的类都直接的或者间接的继承自Object类
    }
}
class Person{
}

1.toString

toString()方法在Object类里定义的,其返回值类型为String类型,返回类名和它的引用地址

1、public String toString() 返回对象的字符串表示,默认使用Object类的toString方法打印的对象, 在 idea中我们可以右键生成to String,或者alt+insert生成to String

2、对象返回一个地址值和全类名没有什么意义,所以建议将toString方法进行重写

  • 重写的原则:返回该对象中所有成员变量的值

3、重写之后使用该方法,或者打印一个对象名,都是打印的toString方法返回的结果,重写之后,打印的结果就是一个类名和属性值的集合

java 复制代码
public class Demo02 {
    public static void main(String[] args) {
        Person p = new Person("小黑",20);
        System.out.println(p.toString());
        System.out.println(p);
       // System.out.println(p.getClass().getName() + "@" + Integer.toHexString(p.hashCode()));
        //一般自定义类中都要重写toString方法,如果不重写打印地址值没有意义
        //重写不需要自己手写,而是通过alt + insert 或者鼠标右键生成
        Person p2 = new Person("小明",222);
        System.out.println(p2);
    }
}
class Person{
    private String name;
    private int age;
//    如果不重写toString方法,默认调用的就是父类的方法功能    也就是object中的打印全类名+@+哈希值
//    @Override
//    public String toString() {
//        return "Person{" +
//                "name='" + name + '\'' +
//                ", age=" + age +
//                '}';
//    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

2.equals

特点:是一个方法,并非运算符只适用于引用数据类型

1、public boolean equals(Object obj) 比较两个对象是否相同

2、比较的是Object类型,比较的是地址值,地址值是否相同

3、在实际生活中,比较地址值没有意义,因此在自定义类中都需要重写该方法

4、重写的原则:比较两个对象的属性值是否相同,如果属性值相同则认为是同一个对象

5、== 和 equals区别:比较的规则不同:

① ==比较任意数据类型,可以比较基本数据类型 ,也可以比较引用数据类型 比较的是地址值

② equals只能比较引用数据类型,equals方法在重写之前,比较是两个对象的地址值,重写之后比较的是对象的属性值

java 复制代码
public class Demo03 {
    public static void main(String[] args) {
        Man m = new Man();
        System.out.println(m.hashCode());//hashCode方法 重写之前是根据地址值生成的哈希值
        Man m2 = new Man();      
        //重写之后,是根据属性值产生对应的哈希值
        //属性值相同,哈希值相同
        //属性值不同,哈希值大概率不同
        System.out.println(m2.hashCode());
        System.out.println(m == m2);
        System.out.println(m.equals(m2)); //equals方法重写之前比较的是地址值,重写之后比较的是属性值
    }
}
class Man{
    //以后在使用自定义类的时候 一般都要重写 toString 和equals方法
    private String name;
    private int age;
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Man man = (Man) o;
        return age == man.age && Objects.equals(name, man.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
    @Override
    public String toString() {
        return "Man{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Man() {
    }
    public Man(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
相关推荐
半旧夜夏16 分钟前
【Spring】AOP的核心原理配方
java·spring
qiuiuiu41320 分钟前
CPrimer Plus第十六章C预处理器和C库总结2-qsort函数
java·c语言·算法
IT学长编程35 分钟前
计算机毕设选题 基于SpringBoot的书店管理系统的设计与实现 网上书店系统 前后端分离 Java毕设项目 毕业设计选题 【附源码+文档报告+安装调试】
java·spring boot·毕业设计·课程设计·前后端分离·网上书店系统·书店管理系统
张较瘦_37 分钟前
应用型本科计算机类专业毕业设计与论文选题指南
java·开发语言·课程设计
IT学长编程37 分钟前
计算机毕设选题 基于SpringBoot的房产租赁管理系统 房屋租赁系统 前后端分离 Java毕设项目 毕业设计选题 【附源码+文档报告+安装调试】
java·spring boot·毕业设计·课程设计·房屋租赁系统·房产租赁系统·文档报告
木易 士心2 小时前
MPAndroidChart 用法解析和性能优化 - Kotlin & Java 双版本
android·java·kotlin
后端小张2 小时前
SpringBoot 控制台秒变炫彩特效,秀翻同事指南!
java·后端
好家伙VCC3 小时前
**标题:发散创新:探索AR开发框架的核心技术**随着增强现实(AR)技术的飞速发展,AR开发框架成为了开发者们关注的焦
java·ar
chools3 小时前
学习问题日记-4
java