zoukankan      html  css  js  c++  java
  • 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方法不做过多赘述。

  • 相关阅读:
    使用CustomValidate自定义验证控件
    C#中金额的大小写转换
    Andriod出错之Unable to build: the file dx.jar was not loaded from the SDK folder!
    VC 编写的打字练习
    机房工作笔记Ping只有单向通
    web服务协同学习笔记(1)
    Dll 学习3 将MDI子窗口封装在DLL中
    机房工作学习文件共享
    Andriod出错之Failed to find an AVD compatible with target 'Android 2.2'
    Andriod出错之wrapper was not properly loaded first
  • 原文地址:https://www.cnblogs.com/roobtyan/p/9576732.html
Copyright © 2011-2022 走看看