首页 > 其他分享 >Object类及常用方法

Object类及常用方法

时间:2024-07-25 17:09:08浏览次数:7  
标签:常用 name age Object System Student println 类及 public

一、Object类

超类、基类,所有类的直接或间接父类,位于继承树的最顶层。

任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。

Object类中定义的方法,是所有对象都具备的方法。

二、getClass()方法

public final Class<?> getClass(){}

返回引用中存储的实际对象类型。

应用:通常用于判断两个引用中实际存储对象类型是否一致。

实例:

Student.java:

public class Student {
    private String name;
    private int age;

//    无参构造
    public Student() {
    }

//    有参构造
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

//    get,set方法,可以获取和设置name和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;
    }
}

Test.java

public class Test {
    public static void main(String[] args) {
//		getclass()方法
        Student s1 = new Student("aaa", 20);
        Student s2 = new Student("bbb", 10);

        Class<? extends Student> class1 = s1.getClass();
        Class<? extends Student> class2 = s2.getClass();

        if(class1 == class2){
            System.out.println("s1和s2属于同一个类型");
        }else {
            System.out.println("s1和s2属于同一个类型");
        }

    }
}

三、hashCode()方法

public int hasnCode(){}

返回该对象的哈希码值

哈希值根据对象的地址或者字符串或者数字,使用hasn算法计算出来int类型的数值。

一般相同对象返回相同的哈希码。

使用上述getClass()方法中的代码,在test.java中加入如下代码:

//        hashCode()方法
        System.out.println("s1的哈希码值:"+s1.hashCode());
        System.out.println("s2的哈希码值:"+s2.hashCode());

        Student s3 = s1;
        System.out.println("s3的哈希码值:"+s3.hashCode());

输出结果中s1和s3的哈希码值相同。

四、toString()方法

public String toString(){}

返回该对象的字符串表示,默认情况下返回该对象的类型名+该对象的十六进制哈希值;通常可以根据程序需求覆盖该方法,如:展示对象各个属性。

实例:

在Test.java的main中添加:

//        toString()方法
        System.out.println(s1.toString());
        System.out.println(s2.toString());

结果如下:

toString()方法的源码如下:

在Student.java中重写toString()方法:

//    重写toString方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

Test.java中输出结果为:

五、equals()方法

public boolean equals(Object obj) {}

默认实现为(this == obj),比较两个对象的地址是否相同

也可以对equals()方法进行重写,比较两个对象的内容是否相等。

重写前:

在Test.java中加入如下代码:

//        equals()方法
        System.out.println(s1.equals(s2));

        Student s4 = new Student("aaaaa",15);
        Student s5 = new Student("aaaaa",15);
        System.out.println(s4.equals(s5));

输出结果为:

,因为s1、s2是两个不同的对象,地址一定不相等,所以调用equals()方法后就为false;s4和s5虽说传入的值相等,但是对象认识两个不同的,所以结果仍为false。

对equals()方法重写:

在Student.java中加入如下代码:

//	重写equals()方法
    @Override
    public boolean equals(Object obj) {
        if (obj == null)
            return false;
        if (this == obj)
            return true;
        if (obj instanceof Student){
            Student s = (Student) obj;
            if (s.name.equals(this.name) && s.age == this.age)
                return true;
        }

        return false;
    }

重写之后的s4和s5调用equals()方法之后结果就为true。

六、代码

Student.java

import java.util.Objects;

public class Student {
    private String name;
    private int age;

//    无参构造
    public Student() {
    }

//    有参构造
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

//    get,set方法,可以获取和设置name和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;
    }



//    重写toString方法

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


    //    重写equals()方法
        @Override
        public boolean equals(Object obj) {
            if (obj == null)
                return false;
            if (this == obj)
                return true;
            if (obj instanceof Student){
                Student s = (Student) obj;
                if (s.name.equals(this.name) && s.age == this.age)
                    return true;
            }

            return false;
        }

}

Test.java

public class Test {
    public static void main(String[] args) {
        Student s1 = new Student("aaa", 20);
        Student s2 = new Student("bbb", 10);

        Class<? extends Student> class1 = s1.getClass();
        Class<? extends Student> class2 = s2.getClass();

        if(class1 == class2){
            System.out.println("s1和s2属于同一个类型");
        }else {
            System.out.println("s1和s2属于同一个类型");
        }
        System.out.println(s1.getClass());
        System.out.println("==============================");

//        hashCode()方法
        System.out.println("s1的哈希码值:"+s1.hashCode());
        System.out.println("s2的哈希码值:"+s2.hashCode());

        Student s3 = s1;
        System.out.println("s3的哈希码值:"+s3.hashCode());

        System.out.println("==============================");

//        toString()方法
        System.out.println(s1.toString());
        System.out.println(s2.toString());

        System.out.println("==============================");

//        equals()方法
        System.out.println(s1.equals(s2));

        Student s4 = new Student("aaaaa",15);
        Student s5 = new Student("aaaaa",15);
        System.out.println(s4.equals(s5));
    }
}

标签:常用,name,age,Object,System,Student,println,类及,public
From: https://www.cnblogs.com/wml201917205/p/18323644

相关文章

  • 【pywpsrpc/Python】改变图片宽高报错 对象无效属性: ‘tuple‘ object has no attrib
    概要开发UOS环境下,使用Python通过pywpsrpc库操作word文档在指定段落添加指定宽高的图片时意外发现的该问题,在原作者的github提问后获得解答后记录(源码地址、对应提问链接以及相关资料链接贴在文章末尾)。原因及解决方式首先贴一段简单的代码,作用是新建一个word文档并在其......
  • Docker常用容器启动命令
    redisdockerrun-p6379:6379--nameredis2-vD:\Docker_Container\redis\conf\redis.conf:/etc/redis/redis.conf-vD:\Docker_Container\redis\data:/data-dredis:7.2.3redis-server/etc/redis/redis.conf--appendonlyyes-p6379:6379:将宿主机的6379端口......
  • 整段 html实现其中的每一个 a 标签跨域下载操作 window.URL.createObjectURL(blob)
    window.URL.createObjectURL(blob)a标签下载问题,通常在a标签中加上download属性,就可完成对href属性链接文件的下载,但仅仅是限于同源文件,如果是非同源,download属性就会失效第一种情况,单独的一个标签实现下载,可以使用span标签+click事件模拟a标签的行为,<spanstyle="co......
  • Linux常用命令
    目录一、目录指令二、文件指令三、查找类指令find四、打包压缩targzip和bzip2一、目录指令1.1pwd:显示当前目录路径1.2cd:改变所在目录option作用cd/进入根目录cd~切换到用户所在路径下/home/usercd..回到上一级目录cd-返回上次所在的目录......
  • mysql常用语法
    MySQL约束注释--单行注释/*多行注释*/#井号注释MySQL命令执行顺序FROM>ON>JOINWHERE>GROUPBY>HAVING+聚合函数>SELECT>ORDERBY>LIMIT数据库设计——DDLshowdatabases; --查看当前所有的数据库use[数据库名]; --打开指定的数据库showtab......
  • Mysql常用函数
    1、FIND_IN_SETFIND_IN_SET()是一个MySQL中的字符串函数,用于在一个由逗号分隔的字符串列表中查找指定字符串的位置。如果找到了指定的字符串,FIND_IN_SET()将返回该字符串在列表中的位置(索引值)。如果没有找到,它将返回0。其语法如下:FIND_IN_SET(str,strlist)str:......
  • Mybatis常用动态标签
    MyBatis动态SQL标签指南MyBatis提供了一组动态SQL处理功能,允许在运行时构建SQL语句。这非常有用,因为你可以根据不同的条件组合查询。下面是常用的动态SQL标签及其使用方法。<if>标签作用:根据表达式的结果决定是否包含某个SQL片段。属性:test属性用于设置判......
  • C语言【面试】常用知识点总结之常用易错易混点解析
    第二部分:程序代码评价或者找错有符号整型和无符号整型混合运算时,有符号型自动转换成无符号型,运算的结果是无符号的。如果参与运算的数据类型不同,会自动转化为同一类再运算,这就是自动转换自动转换的规则如下:1.当参与运算的数据的类型不同时,编译系统会自动先将他们转换成......
  • 常用端口申请IP SSL实现https教程
    在网络安全和数据保护方面,使用HTTPS协议来保护网站和应用程序的通信变得至关重要。一般情况下,HTTPS证书是基于域名签发的。但是,有时候我们可能需要为IP地址申请HTTPS证书,在一些特殊场景下确保通信的安全性。IPSSL证书也是SSL证书的一种,因其是颁发给IP地址使用的,所以我们......
  • Linux常用命令总结
    基础命令文件管理命令cata.txt#显示文本文件的内容cat-na.txt#显示文本文件的内容(并显示行号)cat-Aa.txt#显示文本文件的内容(含不可见字符)head/tail-na.txt#查看指定文件的头部/尾部内容less/more-na.txt#以分页方式查看长文件od-xa.txt#以十六进......