zoukankan      html  css  js  c++  java
  • 【JAVA基础】10 Object类

    1. Object类概述

    • 是类层次结构的根类
    • 每个类都使用 Object 作为超类
    • 所有类都直接或者间接的继承自该类
    • 所有对象(包括数组)都实现这个类的方法。

     

    2. Object的构造方法

    • public Object()
    • 回想面向对象中为什么说:
    • 子类的构造方法默认访问的是父类的无参构造方法

     

    3. Object类的hashCode()方法

    • Object类的hashCode()方法
      • 案例演示

        • package com.heima.object;
          
          import com.heima.animal.Cat;
          
          
          public class Demo1_HashCode {
          
              /**
               * @param args
               */
              public static void main(String[] args) {
                  Object obj1 = new Object();
                  int num = obj1.hashCode();
                  System.out.println(num); //输出7309408
                  
                  Cat c1 = new Cat();
                  System.out.println(c1.hashCode()); //输出26905665
                  
                  Cat c2 = new Cat();
                  System.out.println(c2.hashCode()); //输出23994111
                  
                  
              }
          
          }
          hashCode()方法
        • public int hashCode()

          • 返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。

          • 不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。

     

    4. Object类的getClass()方法

    • Object类的getClass()方法
      • 案例演示

        • package com.heima.object;
          
          import com.heima.animal.Cat;
          
          public class Demo2_GetClass {
          
              /**
               * @param args
               */
              public static void main(String[] args) {
                  Cat c1 = new Cat();
                  System.out.println(c1.getClass());
                  
                  Class clazz = c1.getClass(); // 获取该对象的字节码文件
                  String name = clazz.getName(); // 获取名称
                  System.out.println(clazz);
                  System.out.println(name);
                  
                  System.out.println(c1.hashCode());
                  System.out.println(clazz.hashCode());
              }
          
          }
          View Code
        • public final Class getClass()

          • 返回此对象的运行时类。

          • 可以通过Class类中的一个方法,获取对象的真实类的全名称。

          • public String getName()

     

    5. Object类的toString()方法

    • 案例演示

      • package com.heima.object;
        
        public class Demo3_ToString {
        
            /**
             * @param args
             */
            public static void main(String[] args) {
                Student s = new Student("Ann", 18);
                String str = s.toString();
                System.out.println(str);
                
                /*public String toString() {
                    return getClass().getName() + "@" + Integer.toHexString(hashCode());
                }
                
                * toString方法源码显示,返回的结果是
                * 类名 + @ + hashCode的十六进制变现形式
                *
                * 这么写,没有实际意义。
                * toString的作用:可以更方便的显示属性值。通过重写toString方法。
                */
                
                System.out.println(s); // 如果直接打印对象的引用,会默认调用toString()方法。
            }
        
        }
      • package com.heima.object;
        
        public class Student {
            private String name;
            private int age;
            
            public Student() {
                super();
                
            }
        
            public Student(String name, int age) {
                super();
                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 "Student [name=" + name + ", age=" + age + "]";
            }
            
            
            
            
            
        
        }
        Student类

     

    6. Object类的equals()方法

    • 案例演示

      • 指示其他某个对象是否与此对象“相等”。

      • 默认情况下比较的是对象的引用是否相同。

      • 由于比较对象的引用没有意义,一般建议重写该方法。

      • package com.heima.object;
        
        public class Student {
            private String name;
            private int age;
            
            public Student() {
                super();
                
            }
        
            public Student(String name, int age) {
                super();
                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 "Student [name=" + name + ", age=" + age + "]";
            }
        
            @Override
            public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + age;
                result = prime * result + ((name == null) ? 0 : name.hashCode());
                return result;
            }
        
            @Override
            /*public boolean equals(Object obj) {
                if (this == obj)
                    return true;
                if (obj == null)
                    return false;
                if (getClass() != obj.getClass())
                    return false;
                Student other = (Student) obj;
                if (age != other.age)
                    return false;
                if (name == null) {
                    if (other.name != null)
                        return false;
                } else if (!name.equals(other.name))
                    return false;
                return true;
            }*/
            
            public boolean equals(Object obj){   
                Student s = (Student)obj;
                return this.name.equals(s.name) && this.age == s.age;    
            }
             /*重写equals方法,由于传递的参数为Object obj,而多态中无法直接调用子类中的属性,需要
              * 向下转型,故 Student s = (Student)obj;
              * 从而获取到Student类中的属性:name和age。
              * String类型的数据有equals方法,int数据作为基本数据类型,没有方法,直接使用"=="。
              * */
            
            
            
        
        }
        View Code
    • ==号和equals方法的区别
      • ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值

      • equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性

  • 相关阅读:
    Xml 和Json解析
    Block高级使用 传值
    UIImagePickerController
    单例传值
    eclipse常用快捷键
    sql去掉多条重复只显示一条
    oracle 游标使用
    oracle 去掉重复的数据
    oracle 把一行用特殊符号分隔变为多行
    oracle 去掉锁表
  • 原文地址:https://www.cnblogs.com/zoe233/p/12780196.html
Copyright © 2011-2022 走看看