首页 > 其他分享 >Object类

Object类

时间:2025-01-19 22:10:53浏览次数:1  
标签:return String age Object public name

Object类

定义

Object: 是java中所有类共同的父类【内置或者自定义】,任何一个类的对象都可以使用Object类中的功能

object类中的成员方法

Object类中的成员方法:
    public int hashCode() 可以看作是一个对象的地址值的另外一种体现,不同的对象可能是一样
    public final Class getClass() 获取当前对象对应类的Class对象
    public String toString()  将一个对象以指定的字符串格式输出, 默认情况下也可以看作是一个地址值的表现形式
        java中直接输出对象名,默认调用的就是toString()方法
        我们正常情况下,直接输出对象名,是想观察对象中的成员变量值的情况,重写toString()方法
两个对象的比较方式: ==
    如果==两边是一个基本数据类型的变量,比较的是具体的数值大小
    如果==两边是引用数据类型的变量,比较的是对象的地址值

例子

class Student1{
    String name;
    int age;

    @Override
    public String toString() {
        return "Student1{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class ObjectDemo1 {
    public static void main(String[] args) {
        Student1 s1 = new Student1();
        s1.name = "张三";
        s1.age = 18;
        System.out.println("姓名:" + s1.name + ", 年龄:" + s1.age);

        System.out.println("-----------------------------------");
        Student1 s2 = new Student1();
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        System.out.println(s1==s2);
        System.out.println("-----------------------------------");
        System.out.println(s1.getClass().getName());
        System.out.println("-----------------------------------");
        System.out.println(s1.toString()); // shujia.day07.ketang.Student1@4554617c
        System.out.println(s1); // shujia.day07.ketang.Student1@4554617c

    }
}

Object中的方法

一个标准类4.0版本:
        成员变量:使用private关键字修饰
        构造方法:提供一个无参和一个所有参数
        成员方法:getXxx()和setXxx(),以及toString()

例子

class Teacher{
    private String name;
    private int age;

    public Teacher() {
    }

    public Teacher(String name, int age) {
        this.name = name;
        this.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;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class ObjectDemo2 {
    public static void main(String[] args) {
        Teacher t1 = new Teacher("小虎", 18);
        System.out.println(t1);
    }
}

Object类中的成员方法:

    public boolean equals(Object obj) Object类中的equals方法底层是使用==比较的,比较的是地址值
        如果要比较内容值的话,需要在对象的类中重写该方法
    protected void finalize()  做垃圾回收的
    protected Object clone() 浅拷贝
        Cloneable接口中什么方法都没有,像这样的接口称之为标记接口
mport java.util.Objects;

class Demo {
    int a = 10;
}

class Student2 implements Cloneable {
    String name;
    int age;
    Demo demo;

    public Student2() {
    }

    public Student2(String name, int age, Demo demo) {
        this.name = name;
        this.age = age;
        this.demo = demo;
    }

    public Student2(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student2{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (o == null || getClass() != o.getClass()) return false;
        Student2 student2 = (Student2) o;
        return age == student2.age && Objects.equals(name, student2.name);
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class ObjectDemo3 {
    public static void main(String[] args) throws Exception {
        Student2 s1 = new Student2("张成阳", 18, new Demo());
//        Student2 s2 = new Student2("张成阳", 18);
//
//        System.out.println(s1.equals(s2)); // s1和s2都是分别new出来的,地址值肯定不一样

        // 从比较地址值变成比较成员变量值
        System.out.println("-----------------------------------");
        Object o1 = s1.clone();
        System.out.println("o1: " + o1);
        System.out.println("s1: " + s1);
        System.out.println(s1 == o1);

        Student2 s2 = (Student2) o1;
        System.out.println(s1.demo == s2.demo);


    }
}

Object中的clone方法

1.作用:复制一个属性值一样的新对象
2.使用:
  需要被克隆的对象实现Cloneable
  重写clone方法
public class Person implements Cloneable{
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.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;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    /*
       问题1:obj直接调用name和age调用不了,因为Object接收了Person类型的对象
            属于多态,多态前提下不能直接调用子类特有内容
       解决问题1:向下转型

       问题2:如果传递的不是Person类型,就会出现类型转换异常
       解决问题2:先判断类型,如果是Person类型,再强转成Person

       问题3:如果传递null呢?,就不用判断类型了,直接给false

       问题4:如果传递自己呢?就不用判断非空了,也不同判断类型了,直接给true
     */
   /* public boolean equals(Object obj){
        if (this==obj){
            return true;
        }

        if (obj==null){
            return false;
        }

        if (obj instanceof Person){
            Person p = (Person) obj;
            return this.name.equals(p.name)&&this.age==p.age;
        }
        return false;

    }*/

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public class Test03 {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person p2 = new Person("涛哥", 16);
        Object o = p2.clone();
        Person p3 = (Person) o;//克隆了一个新对象

        System.out.println(p2==p3);//比较地址值  false
        System.out.println(p2.equals(p3));//true
    }
}

标签:return,String,age,Object,public,name
From: https://www.cnblogs.com/03270925yhd/p/18680332

相关文章

  • objectMapper详解
    objectMapper详解1、主要功能ObjectMapper是Jackson库中的核心类,用于在Java对象和JSON数据之间进行序列化(将Java对象转换为JSON)和反序列化(将JSON转换为Java对象)。ObjectMapper提供了丰富的配置选项和功能,可以帮助开发者处理复杂的JSON数据结构。序列化:......
  • 学习012-04-09-01-02 How to: Show a Custom Data-Bound Control in an XAF View (Bla
    Howto:ShowaCustomData-BoundControlinanXAFView(Blazor)-CurrentObjectData(如何:在XAF视图(Blazor)中显示自定义数据绑定控件-当前对象数据)ThisarticleexplainshowtocreateareusableViewItemthatcanworkwithdatasuppliedbytheView’sc......
  • GCC支持Objective C的故事?Objective-C?GCC只能编译C语言吗?Objective-C 1.0和2.0有什
    GCC支持ObjectiveC的故事Objective-C主要由 Stepstone 公司的BradCox和 TomLove在1980年左右发明。乔布斯离开苹果公司后成立了NeXTSTEP公司, 买下了Objective-C语言的授权。GCC对Objective-C语言的支持是在1992年加入的,具体是在GCC1.3版本中首次引入的。G......
  • QObject::moveToThread成员函数
    头文件包含......
  • vPC Object Tracking
    未启用vPCobjecttracking当primary设备上承载peer-link和uplinks的vPC的板卡发生故障时,即便secondary设备运行正常,也会导致完全流量黑洞。因为peer-link断开,secondary会挂起vPC VLAN/SVI,primary设备上的vPC仍将保持启用状态但同时上行链路断开,(南北向)流量就会被丢弃......
  • goal vs objective vs target
    goal680objective2421target1284 GOALvsOBJECTIVEleft4WORD1:GOAL过滤200 WORDW1W2 SCORED14231HehasscoredafurtherfivegoalsintheSpanishSupercupandtheChampionsLeague.他在西班牙超级杯和冠军联赛中又打进了五个进球。  scored......
  • idea中,在pom文件引入jwt使用,JwtTes测试报错Cannot resolve method ‘withClaim(String
    JwtTes测试类中报错Cannotresolvemethod'withClaim(String,Map<String,Object>)'  1.报错报这个错误可能是jwt版本问题,下面请看我的报错文件JwtTest.javapom.xml找了好一会,以为是没加分号的原因,以为是用了中文标点,结果检查了一遍,代码没有问题,标点没有问题。......
  • .git/objects/pack下pack文件很大,但是目前仓库并没有大文件
    git秉承“代码安全为主”,每一次commit都会硬性做备份。之前我使用自己的脚本#!/bin/bash#set-xusage(){echo"Usage:$0[path][lines]"echo"path:localgitrepository"echo"lines:howmuchfilestoshow&remove,default100"echoecho"eg......
  • RepPoints: Point Set Representation for Object Detection—用于目标检测的点集表示
    用于目标检测的点集表示-RepDet全网最全InternationalConferenceonComputerVision(ICCV2019)对这种检测模型生成的点进行基于点的匹配过程完成跟踪但是可否保证随着人的运动或者形状的改变每次选取的关键点是否一致呢?文章目录用于目标检测的点集表示-RepDet全......
  • Objective-C语言的数据结构
    Objective-C语言中的数据结构Objective-C是一种面向对象的编程语言,其在苹果公司的软件开发中得到了广泛应用。它主要用于开发macOS和iOS应用程序。虽然Objective-C有许多丰富的特性,但在程序设计中,数据结构仍然是构建任何应用程序的基础。本文将探讨Objective-C中的几种常见......