美文网首页
java笔记--Object类

java笔记--Object类

作者: 吃饱喝足搬代码丶 | 来源:发表于2018-04-07 14:24 被阅读0次

    Object:

    Object是不断抽取而来的,具备所有对象的共性内容,是所有类的根类。

    常用的共性功能:

    1 equals方法:

    class Person extends Object{
        private int age;
        Person(int age){
            this.age=age;
        }
        /*
        //比较Person的年龄,是否是同龄人
        public boolean compare(Person p){
            return this.age==p.age;
        }
        */
    
        /*equals方法覆盖     开发的时候经常用
        一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据
        */
        public boolean equals(Object obj)//Object obj=p2{
        {
            if(obj instanceof Person){
                //return flase
                throw new ClassCastException("类型错误");
            }
            Person p=(Person) obj;//因为obj在上面被向上转型为Object,引用不了age,所以这里要强转为Person
            return this.age==p.age;
        }
    }
    class Demo{}
    public class ObjectDemo {
        
        public static void main(String[] args) {    
            Person p1=new Person(20);
            Person p2=new Person(20);
            Person p3=p1;
            Demo d=new Demo();
            
            System.out.println(p1==p2);
            System.out.println(p1==p3);
            System.out.println(p1.equals(p2));//比较的是地址,是否指向同一个对象
            System.out.println(p1.equals(p3));
            System.out.println(p1.equals(d));
        }
    }
    
    运行:

    2 hashCode方法:(重点:结构体会用)

    当equals方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

    class Person extends Object{
        private int age;
        Person(int age){
            this.age=age;
        }
        public boolean equals(Object obj)//Object obj=p2{
        {
            if(obj instanceof Person){
                //return flase
                throw new ClassCastException("类型错误");
            }
            Person p=(Person) obj;//因为obj在上面被向上转型为Object,引用不了age,所以这里要强转为Person
            return this.age==p.age;
        }
        public int hashCode(){
            return age;
        }
    }
    class Demo{}
    public class ObjectDemo {
        
        public static void main(String[] args) {    
            Person p1=new Person(20);
            Person p2=new Person(20);
            Person p3=p1;
            Demo d=new Demo();
            
            System.out.println(p1);
            System.out.println(p1.hashCode());
            System.out.println(Integer.toHexString(p1.hashCode()));
        }
    }
    
    运行:

    3 getClass:

    系统自带的类Class里的方法,在主函数中添加代码:

    Class clazz1=p1.getClass();
            Class clazz2=p2.getClass();
            System.out.println(clazz1==clazz2);
            System.out.println(clazz1.getName());
    
    运行:

    get的Name就是编译类Person后得到的Person.class字节码文件的Name。

    4 toString方法:

    class Person extends Object{
        private int age;
        Person(int age){
            this.age=age;
        }
        
        public boolean equals(Object obj)//Object obj=p2{
        {
            if(obj instanceof Person){
                //return flase
                throw new ClassCastException("类型错误");
            }
            Person p=(Person) obj;
            return this.age==p.age;
        }
    }
    class Demo{}
    public class ObjectDemo {
        
        public static void main(String[] args) {    
            Person p1=new Person(20);
            Person p2=new Person(20);
            Person p3=p1;
            Demo d=new Demo();
            
            System.out.println(p1);
            System.out.println(p1.getClass().getName()+"$"+Integer.toHexString(p1.hashCode()));
        }
    }
    
    运行:

    在Person中添加方法:

    public String toString(){//System.out.println(p1);主函数中会默认调用toString
            return "Person :"+age;
        }
    
    运行:

    在开发中,像Person这种类似于数据模型的类,就是说这种类会产生n多对象(学生那,工人那...),他们里边通常都会覆盖equals、hashCode、toString方法。

    相关文章

      网友评论

          本文标题:java笔记--Object类

          本文链接:https://www.haomeiwen.com/subject/bmxyhftx.html